L'aggiornamento di Craft CMS non riesce
Sto provando ad aggiornare da 3.3.15 a 3.5.5 dal pannello di controllo.
Lo eseguo tramite docker quindi tutto ciò di cui ho bisogno è aggiornare il file composer.lock per avere le dipendenze corrette e tutto dovrebbe andare bene la prossima volta che ricostruisco l'immagine, ma sta accadendo qualcosa di strano.
Dopo aver selezionato l'aggiornamento, viene eseguito per alcuni minuti e quindi riceve solo un errore interno del server. Registra quanto segue:
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "NOTICE: PHP message: PHP Fatal error: Uncaught Error: Class 'Yii' not found in /app/vendor/yiisoft/yii2/validators/IpValidator.php:218"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "Stack trace:"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#0 /app/vendor/yiisoft/yii2/base/BaseObject.php(109): yii\validators\IpValidator->init()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#1 /app/vendor/yiisoft/yii2/web/Request.php(345): yii\base\BaseObject->__construct()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#2 /app/vendor/yiisoft/yii2/web/Request.php(1877): yii\web\Request->getIpValidator()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#3 /app/vendor/yiisoft/yii2/web/Request.php(1859): yii\web\Request->getSecureForwardedHeaderTrustedParts()"
craft_1 | [21-Aug-2020 07:38:50] WARNING: [pool www] child 146 said into stderr: "#4 /app/vendor/yiisoft/yii2/web/Request.php(1084): yii\web\Request->getSecureForwardedHeaderTrustedPart('proto')"
craft_1 | 2020/08/21 07:38:50 [error] 139#139: *4 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class 'Yii' not found in /app/vendor/yiisoft/yii2/validators/IpValidator.php:218
il che è un po 'strano, perché una dipendenza scompare quando si aggiorna in questo modo? Dopo questo tentativo di aggiornamento, l'installazione viene lasciata in uno stato non funzionante, fornendo 500 errori (e lo stesso errore, Yii non trovato) per tutte le richieste. Il ripristino del file composer.json + composer.lock e la reinstallazione delle dipendenze ripristina la funzionalità.
Ho avuto lo stesso problema durante il tentativo di aggiornamento a 3.4, ma ho posticipato l'aggiornamento a quel punto perché avevo altre priorità.
Posso aggiungere, rimuovere e aggiornare plugin dal negozio senza problemi con questa immagine. Ho composer.json e composer.lock scrivibili, così come la cartella del fornitore, l'archiviazione e le migrazioni.
EDIT: Sembra effettivamente che la modifica in 3.3.16 stia causando questo, l'aggiornamento di yii a 2.0.30. Facendo questo:
bash-4.4# composer require craftcms/cms:3.3.16
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- Can only install one of: yiisoft/yii2[2.0.30, 2.0.21].
- craftcms/cms 3.3.16 requires yiisoft/yii2 ~2.0.30.0 -> satisfiable by yiisoft/yii2[2.0.30].
- Installation request for craftcms/cms 3.3.16 -> satisfiable by craftcms/cms[3.3.16].
- Installation request for yiisoft/yii2 (locked at 2.0.21) -> satisfiable by yiisoft/yii2[2.0.21].
Installation failed, reverting ./composer.json to its original content.
Non capisco perché si lamenta del fatto che yii2 sia bloccato su quella versione. Niente in composer.lock afferma esplicitamente quella versione, tutti usano ~ versioni.
Ma anche quando elimino il file di blocco, la cartella del fornitore ed eseguo un'installazione del compositore, sembra che l'installazione sia riuscita 2.0.30 di Yii2 ma ricevo ancora quel messaggio, sto iniziando a essere molto frustrato al compositore ...
EDIT 2: questo è il mio file del compositore:
{
"repositories": [
{
"type": "artifact",
"url": "composer-artifacts/"
}
],
"require": {
"aws/aws-sdk-php": "^3.112",
"carlcs/craft-redactorcustomstyles": "3.0.2",
"codemix/yii2-streamlog": "^1.2",
"craftcms/aws-s3": "^1.2",
"craftcms/cms": "^3.3.15",
"craftcms/redactor": "2.3.3.2",
"dolphiq/redirect": "1.0.24",
"mmikkel/retcon": "2.0.12",
"thejoshsmith/craft-title-to-sidebar": "1.0.1",
"verbb/super-table": "2.3.3",
"vlucas/phpdotenv": "^3.4.0"
},
"autoload": {
"psr-4": {
"rex\\craft\\modules\\": "modules/"
}
},
"config": {
"sort-packages": true,
"optimize-autoloader": true,
"platform": {
"php": "7.0"
},
"github-oauth": {
"github.com": "xxxxxx"
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
]
}
}
MODIFICA 3: ho usato la stessa configurazione su una configurazione 3.5.5 completamente nuova e ho eseguito l'aggiornamento a 3.5.6 senza problemi. Sembra che ci siano alcuni problemi con 3.3.15 e aggiornamenti, o forse alcuni plugin (anche se ho provato a rimuoverli da composer.json e continua a non funzionare).
EDIT 4: ho provato a eseguire ./craft update all
ora all'interno del contenitore e l'output afferma semplicemente:
bash-5.0# ./craft update all
Fetching available updates ... done
Performing 6 updates:
- craft 3.3.15 => 3.5.9
- aws-s3 1.2.5 => 1.2.11
- redactor 2.3.3.2 => 2.4.0
- redactor-custom-styles 3.0.2 => 3.0.4
- redirect 1.0.24 => 1.1.1
- retcon 2.0.12 => 2.2.1
Backup the database? (yes|no) [yes]:no
Skipping database backup.
Performing update with Composer ... error: An error occurred
Output:
<warning>Package "craftcms/vue-asset" listed for update is not installed. Ignoring.</warning>
<warning>Package "danielstjules/stringy" listed for update is not installed. Ignoring.</warning>
<warning>Package "yiisoft/yii2-shell" listed for update is not installed. Ignoring.</warning>
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for carlcs/craft-redactorcustomstyles 3.0.4 -> satisfiable by carlcs/craft-redactorcustomstyles[3.0.4].
- carlcs/craft-redactorcustomstyles 3.0.4 requires craftcms/redactor ^2.7.0 -> satisfiable by craftcms/redactor[2.7.4, 2.7.3, 2.7.2, 2.7.1, 2.7.0] but these conflict with your requirements or minimum-stability.
<warning>Running update with --no-dev does not mean require-dev is ignored, it just means the packages will not be installed. If dev requirements are blocking the update you have to resolve those problems.</warning>
Revert the Composer changes? (yes|no) [yes]:
MODIFICA 5:
Ho trovato il colpevole, ma non capisco davvero perché funziona in alcune versioni ma non in altre.
In general.php, sto usando yii\web\Request
per capire il nome host "locale"
use yii\web\Request;
$request = new Request; ... '@baseUrlPrefix' => getenv('BASE_URL_PREFIX') ?: $request->getHostInfo(),
quando si imposta un alias. Questo fallisce per qualche motivo, su alcune versioni (di Yii? Non lo so).
Risposte
Non puoi creare una nuova yii\web\Request
istanza in general.php perché Craft non è ancora completamente inizializzato . Funzionava nelle versioni precedenti, ma il team di Craft sembra aver cambiato l'ordine di caricamento.
È necessario trovare un altro modo per definire l'URL di base del sito.
Hai provato a rimuovere il file composer.lock e la directory del fornitore e quindi a eseguire una nuova installazione del compositore?