Не удается обновить Craft CMS
Я пытаюсь перейти с 3.3.15 на 3.5.5 из панели управления.
Я запускаю его через докер, поэтому все, что мне нужно, это обновить файл composer.lock, чтобы иметь правильные зависимости, и все должно быть в порядке, когда я в следующий раз перестрою образ, но происходит что-то странное.
После выбора обновления оно запускается в течение нескольких минут, а затем выдает только внутреннюю ошибку сервера. Он регистрирует следующее:
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
что немного странно, почему при таком обновлении зависимость исчезнет? После этой попытки обновления установка остается в прерванном состоянии, что дает 500 ошибок (и ту же ошибку, Yii не найден) для всех запросов. Возврат файла composer.json + composer.lock и повторная установка зависимостей восстанавливает функциональность.
У меня была такая же проблема при попытке обновления до 3.4, но я отложил обновление на тот момент, потому что у меня были другие приоритеты.
Я могу без проблем добавлять, удалять и обновлять плагины из магазина с этим образом. У меня есть composer.json и composer.lock с возможностью записи, а также папка поставщика, хранилище и миграции.
РЕДАКТИРОВАТЬ: На самом деле кажется, что изменение в 3.3.16 вызывает это, обновление yii до 2.0.30. Делая это:
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.
Я не понимаю, почему он жалуется на привязку yii2 к этой версии. Ничто в composer.lock явно не указывает эту версию, все они используют ~ версии.
Но даже когда я удаляю файл блокировки, папку поставщика и запускаю установку композитора, кажется, что я успешно установил 2.0.30 Yii2, но я все еще получаю это сообщение, я начинаю очень расстраиваться из-за композитора ...
РЕДАКТИРОВАТЬ 2: Это мой файл композитора:
{
"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');\""
]
}
}
РЕДАКТИРОВАТЬ 3: Я использовал ту же настройку на совершенно новой установке 3.5.5 и выполнил обновление до 3.5.6 без проблем. Похоже, есть некоторые проблемы с 3.3.15 и обновлениями, или, возможно, с некоторыми плагинами (хотя я пытался удалить их из composer.json, но все равно не удалось).
РЕДАКТИРОВАТЬ 4: Я пробовал работать ./craft update allв контейнере сейчас, и в выводе просто указано:
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]:
РЕДАКТИРОВАТЬ 5:
Я нашел виновника, но не совсем понимаю, почему это работает в некоторых версиях, но не работает в других.
В общем .php я использую yii\web\Requestдля определения "локального" имени хоста
use yii\web\Request;
$request = new Request; ... '@baseUrlPrefix' => getenv('BASE_URL_PREFIX') ?: $request->getHostInfo(),
при установке псевдонима. Это по какой-то причине не работает в некоторых версиях (Yii? Не знаю).
Ответы
Вы не можете создать новый yii\web\Requestэкземпляр в general.php, потому что Craft еще не полностью инициализирован . Это работало в предыдущих версиях, но команда Craft, похоже, изменила порядок загрузки.
Вы должны найти другой способ определить базовый URL вашего сайта.
Вы пытались удалить файл composer.lock и каталог vendor, а затем выполнить новую установку composer?