Ниже КИ для патча - релизов 8.4.x> 8.4.y , но не нормальны для незначительных выпусков 8.4.x> 8.5.x . Перейдите к ОБНОВЛЕНИЮ 3 ниже, чтобы найти ответ на небольшие обновления.
1- Сделайте резервную копию любых файлов, которые поставляются с Drupal, которые вы изменили, таких как .htaccess, robots.txt и т. Д. (Эти 2 наиболее часто изменяются).
2- [Мне сказали, что удалить файл блокировки неправильно, см. ОБНОВЛЕНИЕ ниже] Удалите файл composer.lock (в папке верхнего уровня вашего сайта). Это воссоздается в шаге 5.
3- Проверьте ваш composer.json (в папке верхнего уровня вашего сайта) и убедитесь, что «drupal: core» находится в разделе require, а не в разделе replace, например.
"require": {
"drupal/core": "^8.4"
},
не
"replace": {
"drupal/core": "^8.4"
},
Если «drupal / core» находится в разделе замены, переместите его в необходимый раздел и удалите раздел замены. Если в разделе замены есть другие записи, просто удалите "drupal / core", а не весь раздел замены - но я думаю, что "drupal / core", как правило, единственное, что есть.
Поместите, какую версию вы хотите обновить в "drupal / core", примеры:
"drupal / core": "^ 8.5" - обновится до последней версии 8.5. "drupal / core": "8.4.6" - обновится до версии 8.4.6.
5- Запустите это (в папке верхнего уровня вашего сайта):
composer update drupal/core --with-dependencies
6- Если ошибок нет, то сделайте как обычно, запустите обновления и очистите кеш:
drush updatedb
drush cr
Или, если не используется drush, перейдите в /update.php для запуска обновлений, затем в admin / config / development / performance и нажмите кнопку «Очистить все кеши».
7- Если вы сделали резервные копии файлов на первом этапе (.htaccess, robots.txt), верните их обратно. Но проверьте, сделал ли Drupal обновления для этих файлов, и добавьте эти изменения к вашим.
СДЕЛАНО
Если при обновлении композитора на шаге 5 возникли ошибки, это обычно происходит из-за проблем с версиями материала в папке vendor.
Это отличный пост по решению таких проблем: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update и прочитайте другие 2 поста Джеффа о Drupal и Composer, чтобы получить больше знаний об этом.
Мне сказали 2 человека в Твиттере, что composer.lock не должен быть удален (Шаг 2 выше). Команда composer update drupal/core --with-dependencies
воссоздает файл блокировки в любом случае.
При тестировании этого метода я считаю, что он работает нормально для 8.4.3> 8.4.6 (например), но я получаю ошибки для 8.4.6> 8.5.x. Отзовусь, когда я это выясню.
Пример ошибок:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
- drupal/core 8.5.0 requires symfony/yaml ~3.4.5 -> satisfiable by symfony/yaml[3.4.x-dev].
- Installation request for drupal/core 8.5.0 -> satisfiable by drupal/core[8.5.0].
- Installation request for symfony/console (locked at v3.2.8, required as ~3.2.8) -> satisfiable by symfony/console[v3.2.8].
Этот пост Джеффа Герлинга посвящен аналогичным проблемам, но пока мне не повезло: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
Так что ... единственное, что мне подходит для 8.4.x> 8.5.x - это "ядерный вариант", который, похоже, используют многие другие, который запускается composer update
.
Я думаю, это нормально, если вы уверены в версиях модуля в composer.json. Возможно, следует заблокировать их до текущей версии. Например:
"drupal/address": "1.3"
скорее, чем:
"drupal/address": "^1.3"
Но правильный ли это ответ?
ОК, ответ, который кажется повсюду, состоит в том, чтобы сделать «ядерный вариант»:
А. Удалить /vendor
папку.
Б. Запустите composer update
и просто обновите ваши модули вместе с ядром. Или заблокируйте версии модулей, composer.json
если вы не хотите их обновлять.
Один человек из Drupal Slack сказал: «Вся философия Composer заключается в том, что вы всегда должны обновлять пакеты как можно чаще» . Пакет включает в себя модули, я думаю. Так что в этом есть какой-то смысл.
Как только я получил от 8.4.6 до 8.5.0, это работало нормально, чтобы получить от 8.5.0 до 8.5.1, composer update drupal/core --with-dependencies
как это было для 8.4.3 до 8.4.6.
Я начинаю заключать, что «ответ» заключается в том, что удаление папки vendor и файла composer.lock с последующим использованием composer update
- это нормально, и что нужно просто убедиться, что номера версий для зависимостей в файле composer.json - это то, что вам нужно , Не так уж сложно управлять тем, какие версии модулей вы хотите сохранить или разрешить обновлять composer.json
.
Например:
"drupal/admin_toolbar": "1.18",
значит придерживаться 1,18
"drupal/admin_toolbar": "^1.18",
означает идти вперед и обновлять, но в пределах 1.x (не 2.x)
Это подтверждается комментарием (General Redneck) к этому сообщению: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
"Одна из вещей, которые я Когда я работаю в поддержке, я обнаружил, что блокировка версий модулей и ядра - это хорошая идея, так что вы МОЖЕТЕ сделать это, когда захотите, потому что бывают случаи, когда некоторые из различных плагинов даже не хотят работать правильно ».
Между прочим, файл composer.lock не помогает, composer update
потому что он сдулся (в отличие от того, composer install
где он читает файл блокировки):
Бег composer install
будет:
- Проверьте,
composer.lock
существует ли
- Если нет, выполните
composer update
для его создания
- Если
composer.lock
существует, установите указанные версии из файла блокировки
Бег composer update
будет:
- Проверьте
composer.json
- Определите последние версии для установки на основе ваших спецификаций версий
- Установите последние версии
- Обновление
composer.lock
для отображения последних установленных версий
Ссылка: https://www.engineyard.com/blog/composer-its-all-about-the-lock-file
Я вижу, что это упомянуто выше: https://github.com/drupal-composer/drupal-project . Я использовал это, и это нормально, но это не является обязательным требованием для использования Composer с Drupal. Это сбивает с толку, как будто "звучит", как будто это из названия. Когда я впервые начал работать с Drupal 8, я думал, что это необходимо, поэтому построил свой первый сайт на D8, полагая, что это лучшая практика.
Эта «версия» Drupal имеет docroot в папке / web, а не в верхней папке проекта. Также к .gitignore добавлено несколько вещей по сравнению с обычным Drupal:
/drush/contrib/
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
Итак, эта версия Drupal действительно больше предназначена для сайтов, которые используют непрерывную интеграцию для создания новой сборки Drupal при каждом развертывании, используя установку composer. Если вы используете более обычный метод, вам, очевидно, придется зафиксировать все вышеперечисленное в своем git-репо, иначе он не будет развернут на вашем сервере [1], и все это необходимо для работы Drupal.
[1] если git участвует в вашем развертывании - если вы развертываете с SFTP, игнорируйте это.