Не удается обновить Craft CMS

Aug 21 2020

Я пытаюсь перейти с 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? Не знаю).

Ответы

2 nstCactus Sep 15 2020 at 01:32

Вы не можете создать новый yii\web\Requestэкземпляр в general.php, потому что Craft еще не полностью инициализирован . Это работало в предыдущих версиях, но команда Craft, похоже, изменила порядок загрузки.

Вы должны найти другой способ определить базовый URL вашего сайта.

MattJenkins Sep 09 2020 at 23:36

Вы пытались удалить файл composer.lock и каталог vendor, а затем выполнить новую установку composer?