Обновление Symfony

Обновление с 5 на 5.1

К сожалению, официальный отчет дает лишь поверхностное понимание, нахожу на оф. сайте, что для обновления подойдет инструкция к версии 4.4, пробую ее.

1. В файле composer. json пакетам symfony меняю 5.0 на 5.1 и делаю: 

composer update

2. С помощью symfony-flex повторно запускаю установку компонента symfony/framework-bundle чтобы обновить настройки:

composer recipes:install symfony/framework-bundle --force -v

3. Проверяю, что изменилось (правлю неймспейсы), запустив тесты и ловлю такую ошибку:

Since symfony/dotenv 5.1: Passing a boolean to the constructor of

4. Это меня наталкивает на мысль, что надо понять, как теперь все устроено, устанавливаю 5.1 в директории рядышком:

composer create-project symfony/symfony-5.1

Сверяю изменения (удалил файл config/bootstrap.php). 

5. Для phpunit оставили совместимость, только в файле phpunit.xml.dist нужно руками прописать:

bootstrap="tests/bootstrap.php"

и создать файл tests/bootstrap.php с содержимым из файла symfony-5.1/ests/bootstrap.php

Прогоняю тесты.

Поднимаю схему бд, прогоняю миграции, накатываю фикстуры.

Вуаля, все работает.

Обновление с 5.1 на 5.2 выполняется подобным образом.

Обновление с 5.2 на 5.3 и затем на 5.4

Читаю документацию и понимаю, что 1-ый шаг делал неправильно, надо было так:

1.1. после изменения версии каждого компонента (например: "symfony/console" с "5.2.*" на "5.3.*") надо так же изменить версию в "extra"-блоке файла composer.json а именно:

"extra": {
      "symfony": {
          "...": "...",
          "require": "5.3.*"
      }
  } 

1.2. и затем выполнить команду: composer update "symfony/*"

Выполняю пункты 2 и 3, и с помощью symfony-flex поочередно обновляю конфигурацию компонентов с помощью рецептов:

composer recipes:update

А если возникли конфликты зависимостей

Должный помочь команды:

  • composer update "symfony/*" --with-all-dependencies
  • composer update --with-all-dependencies

А если конфликты все равно не разрешаются

Должен помочь совет: указать пакеты (которые конфликтуют) в файл composer.json

А если возник баг несовместимости пакетов

Если все сделали, проект работает, но при входе в symfony профилировщик /_profiler/38717c?panel=logger возникает ошибка:

Uncaught PHP Exception Twig\Error\RuntimeError: "An exception has been thrown during the rendering of a template ("Notice: Undefined index: timestamp_rfc3339").

... то копая сорцы в рамках одной симфони-версии можно обнаружить отличие например с файлом DebugProcessor, который подключен в рамках компонента symfony/monolog-bridge, ага идем в composer.lock и обнаруживаем устаревание версии компонента, вердикт - обновлены не все версии symfony компонентов.

Удачки.


21.02.2011 15:28