Instalace Nextras ORM s migracemi
- BaruCepa
- Člen | 33
Zdravím, snažím se rozjet si u sebe toto demo https://github.com/…m-demo-nette, stáhla Nextras ORM, migration, Contributte/Console dle dokumentace a zde právě narazila. Při pokusu o rozjetí konzole se objeví fatal error
Fatal error: Uncaught Error: Call to a member function getByType() on int in C:\Users\START\www\nette-LPregister\bin\console on line 5
Soubor bin/console:
#!/usr/bin/env php
<?php
declare(strict_types = 1);
/** @var \Nette\DI\Container $container */
$container = require __DIR__ . '/../app/bootstrap.php';
$console = $container->getByType(Contributte\Console\Application::class);
exit($console->run());
composer.json:
{
"name": "nette/web-project",
"description": "Nette: Standard Web Project",
"keywords": ["nette"],
"type": "project",
"license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
"require": {
"php": ">= 8.0",
"nette/application": "^3.1",
"nette/bootstrap": "^3.2",
"nette/caching": "^3.2",
"nette/database": "^3.1",
"nette/di": "^3.1",
"nette/forms": "^3.1",
"nette/http": "^3.2",
"nette/mail": "^4.0",
"nette/robot-loader": "^4.0",
"nette/security": "^3.1",
"nette/utils": "^4.0",
"latte/latte": "^3.0",
"tracy/tracy": "^2.9",
"nextras/orm": "^4.0",
"nextras/migrations": "^3.2",
"contributte/console": "^0.9.3"
},
"require-dev": {
"nette/tester": "^2.4",
"symfony/thanks": "^1"
},
"autoload": {
"psr-4": {
"App\\": "app"
}
},
"minimum-stability": "stable",
"config": {
"allow-plugins": {
"symfony/thanks": true
}
}
}
common.neon:
extensions:
dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
php:
date.timezone: Europe/Prague
orm:
model: App\Orm\Orm
migrations:
dir: %appDir%/../migrations
driver: mysql
dbal: nextras
withDummyData: true
Projela jsem zdejší příspěvky právě s problémy ohledně rozjetí konzole, zkusila si projet kontroly, které jste radili, ale s touto chybou se nikdo nepochlubil, tak už nevím.
- nightfish
- Člen | 474
@BaruCepa Chybová hláška říká, že se pokoušíš volat
getByType()
na hodnotě typu int
. Jediné volání
getByType()
v bin/console
je na proměnné
$container
, která vzniká jako
$container = require __DIR__ . '/../app/bootstrap.php';
. V
$container
by měl být sestavený DI kontejner, nikoliv
int
, takže se podívej, co se děje v
app/bootstrap.php
.
Tipnul bych si, že chceš spíš v bin/console
vytáhnout
kontejner stejným způsobem, jako ve www/index.php, tzn.:
require __DIR__ . '/../vendor/autoload.php';
$configurator = App\Bootstrap::boot();
$container = $configurator->createContainer();
- BaruCepa
- Člen | 33
@nightfish Rozumím, upravila jsem soubor console dle následujícího:
#!/usr/bin/env php
<?php
declare(strict_types = 1);
require __DIR__ . '/../vendor/autoload.php';
$configurator = App\Bootstrap::boot();
$container = $configurator->createContainer();
$console = $container->getByType(Contributte\Console\Application::class);
exit($console->run());
provolala jsem ve složce bin příkaz php console, Fatal error už nenastal, takže částečný úspěch. Objevil se výčet:
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Console Tool
Usage:
command [options] [arguments]
Options:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
In MysqliDriver.php line 445:
php_network_getaddresses: getaddrinfo for database failed: Nen znm dn takov hostitel.
list [--raw] [--format FORMAT] [--short] [--] [<namespace>]
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
- nightfish
- Člen | 474
@BaruCepa Možná ti chybí nastavení pro dbal
–
v podstatě obsah tohoto souboru https://github.com/…example.neon
by měl být někde, kde se na něj dostane Bootstrap::boot() – pokud máš
aplikaci založenou na nette/web-project
, tak nejspíš v
app/config/local.neon
. Samozřejmě si v něm nastav adresu
serveru, název databáze, jméno uživatele a jeho heslo podle toho, jak máš
nastavenou databázi. (Tzn. pokud na projektu používáš např.
nette/database
, tak budeš mít v database:
a
dbal:
± stejné hodnoty.)
- BaruCepa
- Člen | 33
@nightfish Svůj local.neon mám takto:
parameters:
database:
dsn: 'mysql:host=database;dbname=example'
user: example
password: example
dbal:
driver: mysqli
host: database
database: example
username: example
password: example
Na projektu chci mít i Docker a asi se mi je nedaří úplně provázat.
- nightfish
- Člen | 474
@BaruCepa
Ten konzolový command předpokládám spouštíš mimo Docker, takže tvé PHP
ve Windows nevidí Docker host database
.
Řešení mě napadají dvě – ale musím přiznat, že mé zkušenosti v této oblasti jsou omezené:
- spouštět konzolový příkaz uvnitř docker kontejneru – tím
zajistíš, že PHP bude schopno správně resolvnout hostname
database
(pravděpodobně něco v duchudocker container run --rm -v %cd%:/app/ php:8.3-cli php /app/bin/console ...
, kde místo...
napíšeš argumenty konzolového commandu; vphp:8.3-cli
si pak uprav verzi PHP podle toho, co reálně používáš; kód jsem vzal z https://stackoverflow.com/a/59511091; možná bude potřeba zajistit, aby se CLI kontejner připojit do stejné sítě, jako ostatní kontejnery) - zpřístupnit si mysql i pro přístup z Windows PHP (exposnout port
3306 kontejneru
database
) + použít probin/console
jiný config, který nastavídbal.host
nalocalhost
(+ možná ve firewallu Windows povolit přístup na port 3306 z lokálního PC).
- BaruCepa
- Člen | 33
Tak jsem spustila příkaz přímo v kontejneru PHP v Docker Desktopu. Spustila jsem dle návodu migrations:reset, tváří se to dobře:
# php bin/console migrations:reset
Nextras Migrations
RESET
3 migrations need to be executed.
- structures/basic-structure.sql; 4 queries; 0.072 s
- dummy-data/basic-testdata.sql; 4 queries; 0.018 s
- structures/comments-deleted.sql; 1 queries; 0.026 s
OK
#
Zkusila jsem pustit localhost v očekávání, že snad už by se měl zobrazit demo projekt s nějakými články z migračních dat. Nette vypsalo toto:
RuntimeException
Unable to create file ‚/var/www/html/temp/cache/nette.search/b3cf2350c17121ad6dc0aac07af71da0.php.lock‘. fopen(/var/www/html/temp/cache/nette.search/b3cf2350c17121ad6dc0aac07af71da0.php.lock): Failed to open stream: Permission denied
Předpokládám problém s právy, no nevím, jak na to.