Обновить ядро Drupal
Рассатривается обновление Drupal сайта между минорными версиями и патчами, например с 8.1.2 до 8.1.3, или с 8.3.5 до 8.4.0.
Прежде всего сделайте полную резервную копию всех файлов и каталогов сайта, базы данных (MySQL) до обновления и сохраните её за пределами установочной директории Drupal.
Рекомендуется пробовать обновление на тестовой копию вашего сайта. Даже незначительные обновления могут вызывать поведение для изменения. В большей степени это относится к плагинам, например может перестать работать выпадающее меню или wysiwyg редактор.
Обновление Drupal 8 до актуальной версии 8.x.x
Под учетной записью администратора переведите сайт в режим обслуживания (Конфигурация -> Разработка -> Режим обслуживания).
Скачайте с сервера drupal.org архив актуальной версию Drupal 8.
- sites
- modules
- themes
- libraries (при наличии)
- .htaccess
- robots.txt
- composer.json
Распакуйте архив с новой версии Drupal 8 в корневую папку вашего веб-сайта.
Запустите скрипт update.php обновления Drupal. Для этого зайдите по адресу http:///update.php и выполните обновление. Этот скрипт обновляет таблицы базы данных.
Откройте файл settings.php в текстовом редакторе.
Проверьте отчёт о состоянии (Администрирование -> Отчеты -> Отчет о состоянии). Убедитесь, что все работает должным образом.
Убедитесь, что вы присвоили параметру $settings[‘update_free_access’] значение FALSE в файле settings.php .
Если обновление прошло удачно, то переведите сайт в режим «Рабочего состояния».
После обновления
- CHANGELOG.txt
- COPYRIGHT.txt
- INSTALL.txt
- LICENSE.txt
- MAINTAINERS.txt
- README.txt
Обновление ядра через Composer
Возникли проблемы с обновлением до Drupal 8.8.0 или новее?
Ключевые изменения были внесены в Drupal 8.8.0 в рамках инициативы Composer, что значительно улучшит рабочие процессы Composer для управления сайтами Drupal в долгосрочной перспективе. Однако есть некоторые особые замечания, которые могут повлиять на обновление с предыдущих версий.
Первые шаги
Чтобы понять, как Composer управляет зависимостями Drupal, см. Использование Composer с Drupal. Чтобы решить, является ли Composer разумным способом обновления, сравните доступные параметры.
Для удобства в эти инструкции включены команды Drush, необходимые для завершения обновления: многие люди находят Drush быстрее и проще, чем веб-панель администратора.
Если это существующий сайт Drupal, где Composer никогда ранее не использовался, сначала убедитесь, что он готов для Composer.
Обновление ядра Drupal 8
Во-первых, убедитесь, что обновление ядра Drupal действительно доступно:
composer update --dry-run "drupal/*"
Это покажет любое доступное незначительное обновление или обновление патча; используйте устаревший composer «drupal / *», если вы хотите узнать, есть ли какие-либо обновления для основных версий. (См. Semver 2.0 для объяснения основных, второстепенных и патч-версий.) Если нет строки, начинающейся с drupal/core, Composer не знает о каких-либо обновлениях. Запишите, есть ли строка, начинающаяся с drupal/core-recommended. Если есть обновление, продолжайте с командами ниже.
Инструкция по обновлению за один шаг
Предполагая, что вы привыкли обновлять Drupal и знаете все меры предосторожности, которые вы должны предпринять, обновление так же просто, как:
composer update drupal/core --with-dependencies drush updatedb drush cache:rebuild
Замените drupal/core на core-recommended, если вы используете core-recommended на своем сайте. Вы можете сказать, что ваш сайт использует core-recommended, если он указан в вашем файле composer.json, или если он был указан в выходных данных composer update —dry-run, когда вы проверяли наличие доступных обновлений.
Если вы запустили свой сайт Drupal некоторое время назад, используя drupal-composer/drupal-project, приведенная выше команда может не сработать. Пожалуйста, прочитайте список ниже.
Для обновления до версии 8.8.0 или новее
Самая последняя версия drupal-composer/drupal-project совместима с Drupal 8.8.x. Однако, если вы создали свой сайт из этого проекта некоторое время назад (2019 и более ранние версии), вам, вероятно, потребуется внести некоторые одноразовые изменения при первом обновлении до версии 8.8.0 или более поздней. Эти изменения подробно описаны в особых замечаниях ниже.
Если вы не установили Drupal 8 с помощью Composer
Если вы не установили Drupal 8 с помощью Composer, вы должны преобразовать свой сайт в проект, управляемый композитором, чтобы иметь возможность обновлять Drupal с помощью приведенных выше команд. См. Добавление Composer к существующим сайтам для пошагового руководства по ручному добавлению Composer к существующим сайтам Drupal 8, которые ранее были установлены без Composer.
Пошаговое обновление инструкции
Все шаги по обновлению ядра Drupal 8 с помощью composer:
1. Всегда делайте резервную копию ваших файлов и базы данных перед обновлением.
- drush sql: dump выведет базу данных
- К сожалению, drush archive-dump был удален из Drush 9, поэтому вам придется использовать стандартный инструмент CLI для резервного копирования необходимых каталогов — обычно за исключением каталога vendor.
2. Прочитайте основные заметки о выпуске. Некоторые добавленные модули или темы могут нуждаться в обновлении для работы с новой минорной версией (например, 8.3–8.4) ядра Drupal. Патч-релизы (например, с 8.4.4 по 8.4.5) не должны требовать этого. Чтобы обнаружить необходимый модуль или обновления темы, вам нужно прочитать страницу проекта или заметки о выпуске.
3. Активируйте режим обслуживания, используя состояние очистки: установите system.maintenance_mode 1, а затем очистите кэш: перестройте.
4. Если вы определили, что некоторые модули или темы нуждаются в обновлении, следуйте инструкциям по обновлению модулей.
5. Обновление ядра Drupal и всех его зависимостей:
— Запустите следующую команду Composer:
composer update drupal/core --with-dependencies
— Замените drupal/core выше на drupal/core-recommended, если вы используете core-рекомендуемый шаблон.
— Если вы запустили свой сайт на Drupal с использованием drupal-composer/drupal-project, ознакомьтесь с приведенными ниже особыми замечаниями, чтобы узнать о дополнительных шагах, которые вам может понадобиться выполнить при первом обновлении до версии 8.8.0 или более поздней.
6. Затем примените все необходимые обновления базы данных с помощью drush updatedb и очистите кэш с помощью drush cache: rebuild
7. Если вы используете управление конфигурацией для развертывания вашей конфигурации, обязательно экспортируйте конфигурацию с помощью drush config:export после обновления базы данных, поскольку некоторые обновления ядра могут изменить структуру файлов конфигурации или ввести для них новые значения. Добавьте опцию —diff для просмотра актуальных изменений.
8. Убедитесь, что с вашим сайтом в Drupal все в порядке:
- Просмотрите страницу отчета о состоянии на наличие ошибок.
- Если модуль ведения журнала базы данных включен, выполните некоторые основные операции и проверьте последние журналы на наличие ошибок, предупреждений и т. д.
9. Отключите режим обслуживания, используя drush state:set system.maintenance_mode 0, а затем очистите кэш: drush cache:rebuild..
10. После отключения режима обслуживания, проверьте сайт также как анонимный пользователь.
В вашей производственной среде
- Вам не нужно повторять остальную часть вышеописанного процесса, так как при composer install будут считаны точные указатели фиксации для всех пакетов из composer.lock, поэтому у вас будут одинаковые версии всего в обеих средах.
- Если у вас есть отдельные dev / staging и production-серверы, убедитесь, что вы копируете / фиксируете файлы composer.json и composer.lock в производство и всегда запускаете composer install —no-dev на производстве, а не обновляете. Ключ —no-dev остановит установку любых пакетов, перечисленных в ‘require-dev’, обычно это модули для отладки и библиотеки для модульного/поведенческого тестирования.
Особые замечания по обновлению до Drupal 8.8.0 и новее
Официальный партнер бета-программы Drupal PreviousNext опубликовал полезную запись в блоге о шагах, которые они предприняли для обновления с Drupal 8.7 до бета-версии Drupal 8.8.0, что может помочь любым другим владельцам сайтов, у которых есть проблемы с этим обновлением.
Основной причиной проблем при обновлении предыдущих версий Drupal до Drupal 8.8.0 с Composer является переход от использования шаблона composer, предоставленного сообществом, к новому официальному шаблону drupal/recommended-project. Следующие шаги по устранению неполадок должны исправить вашу установку, чтобы вы могли использовать стандартные инструкции по обновлению, как описано выше.
Попробуйте удалить каталог / vendor
Удаление каталога вашего поставщика может иногда устранить конфликты при запуске обновления композитора. Для этого:
cd your_install_dir rm -rf vendor
Затем вы можете продолжить выполнение этих действий по устранению неполадок и / или продолжить выполнение команды обновления композитора.
Миграция с webflo/drupal-core-strict на drupal/core-recommended
До выпуска 8.8.0 многие сайты использовали метапакет webflo/drupal-core-strict для привязки зависимостей к точным версиям, используемым/протестированным с ядром Drupal (в основном это пакеты Symfony). Начиная с версии 8.8.0, ядро Drupal предоставляет пакет drupal/core-recommended для реализации этой функции. Однако переход от старого к новому методу не происходит автоматически при обновлении до ядра 8.8.0, и пакет webflo/drupal-core-strict не работает с 8.8.0.
Самый простой способ выполнить эту миграцию и избежать конфликтов — полностью удалить файл composer.lock как часть обновления. Однако, это будет означать, что другие зависимости (например, добавленные модули Drupal) также могут быть обновлены. Выполнение этих шагов обеспечит обновление именно того, что вы намереваетесь:
- composer update # Обновлять любые зависимости как отдельный шаг.
- git add composer.lock; git commit # Сохраните обновления как отдельный коммит.
- composer remove webflo/drupal-core-strict —no-update
- composer remove drupal/core —no-update
- composer require ‘composer/installers:^1.7’ —no-update
- rm composer.lock
- rm -rf vendor # Также помогает избежать конфликтов.
- composer require drupal/core-recommended:^8.8 —update-with-dependencies
- git add composer.json composer.lock; git commit -m «Update Drupal to 8.8.0 and use drupal/core-recommended instead of webflo/drupal-core-strict»
Миграция с webflo/drupal-core-require-dev на drupal/core-dev
Если вы создали свой сайт некоторое время назад, он может использовать метапакет webflo/drupal-core-require-dev для включения зависимостей разработки Drupal для выполнения модульного и функционального тестирования. Если вы не используете для разработки зависимости разработки Drupal, вы можете просто удалить webflo/drupal-core-require-dev. В противном случае вы должны начать использовать проект drupal/core-dev.
Во-первых, старый пакет инструментов разработчика должен быть удален:
composer remove --dev webflo/drupal-core-require-dev
Если вам не нужны инструменты разработчика, вы можете остановиться здесь. Если вы хотите установить их снова, используя официальный метод, запустите:
composer require --dev drupal/core-dev
Обновление патчей
Если вы применяете патчи, используя cweagans/composer-patches, то эти патчи, возможно, придется перекатывать. После того, как патч перемотан, вам нужно будет обновить патч в разделе extra/patches вашего composer.json.
Обновление конфликтующих мягких зависимостей
В некоторых случаях может быть установлена программная зависимость с версией, несовместимой с последней версией Drupal. Решение, в этом случае, состоит в том, чтобы composer require определенных версий этих модулей обновлял ядро, а затем удалял зависимости.
Следующий пример взят из отличного поста PreviousNext:
Во-первых, требуется новое ядро и зависимости Drupal:
composer require --update-with-dependencies \ drupal/core:^8.8.0 \ symfony/finder:^3.4 \ symfony/filesystem:^3.4
Во-вторых, требуется новый пакет core-dev и зависимости:
composer require --dev --update-with-dependencies \ drupal/core-dev:^8.8.0 \ symfony/debug:^3.4
Наконец, удалите временно необходимые зависимости:
composer remove -n \ symfony/finder \ symfony/filesystem \
composer remove -n --dev symfony/debug
Обновление базы данных конфигурации и схемы
После обновления базы кода вам может потребоваться обновить конфигурацию и схему базы данных:
drush updb drush cr drush config-export
Обновление Settings.php
Просто измените с:
$config_directories['sync'] = 'foo/bar';
$settings['config_sync_directory'] = 'foo/bar';
Известные проблемы и обходные пути
Если вы запустите команду composer update выше, но drupal/core не обновится, возможно, существует другая зависимость, сдерживающая обновление Drupal. Вы можете проверить блокировку зависимостей, используя команду composer prohibits. Например, если вы пытаетесь обновить версию с 8.4.5 до 8.5.0, вы можете запустить composer prohibits drupal/core:8.5.0, и он должен предоставить список зависимостей, блокирующих обновление. Обновите эти зависимости вместе с drupal/core, и он должен работать (например, composer update drupal/core «symfony/*» —with-dependencies).
Проблемы обновления Composer часто связаны с оставленными шаблонами composer или неправильными настройками в composer.json. Убедитесь, что вы используете шаблон композитора, такой как предложенный в главе 3.5. Руководства пользователя Drupal 8 «Использование Composer для загрузки и обновления файлов». См. Добавление Composer к существующим сайтам для пошагового руководства по ручному добавлению Composer к существующим сайтам Drupal 8, которые ранее были установлены без Composer.
По состоянию на январь 2020 г. шаблон Composer drupal-composer/drupal-project для проектов Drupal больше не является рекомендуемым шаблоном для Drupal 8.8 и выше. До тех пор, пока глава 3.5 Руководства пользователя Drupal 8 не будет обновлена, обратитесь к Руководству сообщества по запуску сайта с использованием шаблонов проектов композитора.
Некоторые другие уместные проблемы и сообщения в блоге с дальнейшей помощью:
- Обновление до Drupal 8.4.0 и Drush 9 с Composer — пост в блоге Бенджи Фишера (@benjifisher) на Isovera, посвященный проблемным обновлениям с 8.3 до 8.4.
- Обновление до Drupal core 8.4, пошаговое руководство — сообщение в блоге PreviousNext, посвященное проблемному обновлению с 8.3 до 8.4.
- Обновление до Drupal 8.5 с помощью composer — сообщение в блоге Eirik Morland (eiriksm), в котором рассматриваются некоторые проблемы, начиная с 8.4 до 8.5.
- Composer не удалось обновить с 8.4.4 до 8.5.0-alpha1 — множество идей о том, как решить проблему обновления Composer.
- Возникли проблемы при обновлении вашего сайта Drupal 8? Тогда этот пост в блоге для вас — пост в блоге для нового плагина GoComposer, который автоматизирует процесс обновления и преобразует ваш сайт в рекомендуемый шаблон.
В случае ошибок и предупреждений, возникающих в середине процесса обновления, рекомендуется внимательно их прочитать и поискать в очередях проблем возможные решения, прежде чем продолжить. В случае фатальных ошибок всегда рекомендуется прекратить дальнейшее обновление и перезапустить весь процесс с нуля, используя резервную копию, рекомендованную ранее.
1.2.1. Обновление модулей и ядра Drupal 8.
Очень часто для модулей и ядра Drupal 8 выходят обновления. Не все обновления стоит ставить, главное обращать внимания на обновления безопасности. Друпал подсвечивает сообщения о таких обновлениях красным цветом. Вариант обновления зависит от того как вы устаналивали Drupal если вы использовали composer, чтобы создать проект, тогда вы сможете использовать composer для обновления друпала. Если вы качали друпал с сайта drupal.org, то вам придется обновлять друпал вручную.
Обновление Drupal с помощью composer
Обновление Drupal через composer рутинная задача, которая выполняется одной командой:
composer update drupal / core —with-dependencies
Важно обновлять drupal —with-depencies, чтобы подтягивались все дополнительные пакеты, от которых зависят пакеты нужные для Drupal. И после этого нужно будет запустить udpate.php файл или drush updatedb, или drupal update:execute.
Обновление Drupal вручную без composer и drush
Вы можете также почитать эту статью по обновлению drupal вручную:
О том как обновлять Drupal 8 можно прочитать на официальном сайте друпала:
https://www.drupal.org/node/1494290
Но меня смущает то, что предлагают удалить все файлы старого друпала. А ведь в них могут храниться сторонние библиотеки, например для Drupal Commerce.
1. Поэтому прежде чем делать обновления друпала и модулей сделайте полную копию сайта и базы данных.
2. Скачайте последнюю версию модуля (ядра друпала) для 8.x ветки.
3. Разархивируйте модуль или друпал отдельно от сайта. Нужно проверить папку vendor возможно чего в ней может не хватать, придется их потом скопировать отдельно. Дополнительные библиотеки могут добавиться с новой версией. Например я устанавливал Drupal Commerce и у меня были дополнительные библиотеки:

Дважды проверьте что у вас есть копия сайта перед обновлением.
Я не уверен что все пройдет гладко если залить файлы поверх с заменой. Я пробовал так обновляться с одной бета версии на другую бету версию, сайт поломался. Но когда обновлял файлы таким образом с 8.0.1 до 8.0.5 все прошло хорошо. Но думаю такое не сработает с переходом на ветку 8.1.0.
4. Установите режим обслуживания, чтобы никто не заходил на сайт и не генерировал ошибки пока вы выполняете обновления:
/admin/config/development/maintenance
Не забудьте снять галочку после обновления, чтобы вернуть сайт в рабочее состояние.
5. Дальше нужно удалить все файлы друпала, кроме папки /sites, /themes/, /modules. В sites лежат файлы содержимого: фотографии, конфигурации, сгенерированные файлы; в папке themes наши кастомные темы для друпала; в папке modules наши дополнительные модули для друпала. Тут нужно прочитать мануал до конца прежде чем кинуться удалить файлы. Проверьте в третий раз, что у вас есть копия сайта, чтобы если что вернуться обратно. В это время когда вы удалите все файлы, сайт не будет работать пока вы не скопируете файлы нового ядра друпала обратно, а друпал состоит из ~10000 файлов, если у вас медленный интернет и вы будете копировать файлы по фтп в 2-3 потока, то это может растянуться на час полтора. Поэтому принимаем меры, чтобы это все прошло быстрее. Опять же я описываю общий случай, когда ваш сайт лежит уже на хостинге, обновиться локально на OpenServer’е проще.
6. Теперь нужно скопировать все файлы новой версии друпала на сервер, кроме папки /sites, /themes/, /modules. Учимся работать с SSH и командной строкой (если хостинг для сайта позволяет использовать SSH , прочитайте доступы к хостингу или обратитесь в тех поддержку с вопросом, а есть ли возможность использовать SSH на хостинге). Через командную строку мы сможем быстро разархивировать весь друпал, нам нужно будет только залить файл архива на сайт:
Для архива tar.gz:
tar -xvzf archive.tar.gz
Если есть доступ по SSH, можно воспользоваться и WinSCP:
Вы можете воспользоваться его коммандами для разархивации:
Или пересоздать tar.gz архива, чтобы в нем лежали сразу файлы друпала, а не папка с файлами друпала. В этом вам может помочь 7Zip:
Пересоздаете архив, сначала выделяете все файлы и через контекстное меню выбираете 7Zip -> Add to archive. Archive формат выбираете tar. После того как tar архив будет создан, выбираете tar архив и снова в контекстном меню выбираете 7Zip -> Add to archive. Теперь будет доступно создание архива gzip (именно gzip, tar не сжатый формат архива, zip не поддерживаете контекстным меню Winscp, а gzip или tar.gz архив). Заливаете архив на сервер (также через winscp) и на сервере уже через меню нажимаете разархивировать:

7. Иногда нужно изменить settings.php вручную, но обычно об этом вы всегда сможете прочитать на странице статуса сайта:
/admin/reports/status
8. Если вы изменяли .htaccess, robots.txt файлы, то внесите снова эти правки.
9. Если у вас был свой favicon.ico, то скопируйте его снова.
10. Залогинтесь на сайт под администратором.
12. Отключите режим обслуживания.
/admin/config/development/maintenance
Если сайт для вас важен, то не используйте его как тестовую площадку, создайте локальную копию сайта на OpenServer. Попробуйте обновить сайт локально, чтобы проверить, что ошибок не возникнет. Если у вас возникают ошибки, пишите в комментариях, попробуем разобраться.
Drupal → Установка Drupal 8 с помощью Composer и бубна
Всё чаще стали предлагать работу на Drupal 8, а я ещё толком за него и не брался. Дай думаю для начала создам свой профиль и переведу блог на восьмёрку, благо совсем недавно вышла версия 8.4.
Начать решил по традиции с скрипта автоматической установки. Уже вбив в sh файлик заветное drush dl drupal вспомнил, что для восьмёрки нужен свежий Drush, несовместимый с версией для Drupal 7. Иду на drush.org → Docs → Install и вижу:
Проблема 1: друпал нельзя скачать с помощью Drush
Сайт встречает заметной плашкой:
Drush 9 only supports one install method. It requires that your Drupal 8 site be built with Composer and Drush be listed as a dependency.
Т.е. друпал должен быть установлен с помощью Composer, а Drush добавлен локально в качестве зависимости. Глобальная установка не поддерживается, но есть отдельная утилита drush-launcher, которая по сути просто перенаправляет команды в vendor/bin/drush .
Вспоминаю о Drupal Console:
Проблема 2: CLI утилиты теперь две
Существует альтернатива Drush под названием Drupal Console. Первоначально она задумывалась как код-генератор, но сейчас по факту клон Drush.
Что же выбрать? Мои фоловеры в твиттере предпочитают Drupal Console. Я пожалуй теперь буду тоже. Хотя ничто не мешает установить и то и другое.
И Drupal Console тоже можно установить только локально.
Ладно, двигаюсь дальше. Гуглю «drupal install composer». Вторая же ссылка ведёт на официальную документацию, где и правда советуют ставить друпал с помощью композера. Но:
Проблема 3: установка через Composer возможна тремя различными способами
Для скачивания друпала предлагается на выбор три варианта:
1. composer create-project drupal-composer/drupal-project
2. composer create-project drupal/drupal
3. с помощью утилиты hussainweb/drupal-composer-init
Это была бы не проблема, если бы все три варианта давали один результат, но результат будет разниться.
Основные отличия кроются в организации каталогов. В drupal-composer/drupal-project и hussainweb/drupal-composer-init папка vendor вынесена за пределы web root, что требует дополнительной настройки сервера.
Остановится решил на втором способе (как выяснится позже — ошибочно), чтобы результат был похож на оригинальный дистрибутив друпала. Выполняю в консоли composer create-project drupal/drupal . Друпал скачался, один в один, как в дистрибутиве.
Читаю документацию дальше. Выясняю, что модули и темы теперь надо ставить тоже с помощью композера — composer require drupal/modulename . Необходимость в Drush начинает пропадать.
Подобный подход позволяет забыть о ручном копировании дополнительных библиотек, требующихся для работы некоторых модулей. Композер сам скачает/обновит все зависимости. Раньше таким занимался drush make.
А sandbox модули ставятся так же просто? Нет:
Проблема 4: sandbox модули ставятся через костыль
Друпаловский композер-репозиторий packages.drupal.org ничего не знает о sandbox-ах. Это значит, что для установки каждого sandbox модуля, нужно дополнительно добавлять в composer.json соответствующий git-репозиторий:
composer config repositories.modulename git "https://git.drupal.org/sandbox/username/123456.git" composer require drupal/modulename
Сразу встаёт вопрос — как же обновлять всё это добро? Простое копирование затрёт изменённые файлы композера и возможно положит сайт. Документация однозначного ответа не даёт, описана только процедура обновления модулей: composer update drupal/modulename —with-dependencies , про обновление ядра пусто. Лезу в гугл. Везде советуют composer update drupal/core —with-dependencies . Ок, выполняю и:
Проблема 5: из коробки невозможно обновить Drupal с помощью Composer
Package «drupal/core» listed for update is not installed.
Пакет drupal/core добавлен в composer.json в секцию replace , поэтому его нельзя обновить с помощью композера. Гуглю, попутно бомблю в твиттер. Нахожу статью Troubleshooting Composer и мою проблему. Советуют изменить composer.json и перенести пакет drupal/core из секции replace в секцию require . Но:
Проблема 6: composer не может удалять пакеты из секции replace
В композере нет команды для удаления пакета из секции replace . Поможет только ручная правка composer.json .
Вручную, так вручную. Удаляю «drupal/core»: «^8.4» . Выполняю composer require drupal/core . Всё отлично, ядро теперь можно обновлять. Главное не забыть после обновления файлов запустить update.php или выполнить vendor/bin/drush updb .
Как обновить сразу всё — ядро и модули? На drupal.org не советуют, но по идее composer update . Выполняю и:
Проблема 7: «composer update» обновляет зависимости ядра даже когда этого не надо
composer update обновляет зависимости ядра, даже когда само ядро ещё не обновилось, т.е. оно с ними не оттестировано и теоретически могут возникнуть трудновоспроизводимые проблемы.
Коллеги в твиттере посоветовали композер модуль webflo/drupal-core-strict. Ставим — composer require webflo/drupal-core-strict . Теперь composer update не обновляет пакеты из core/composer.lock , зато обновляет другие зависимости. Возможно не зря советовали не выполнять глобальный update. Как тогда за раз обновить овер сто модулей вопрос открытый.
Проблема 8: файлы вне папки core не обновляются
Файлы index.php , robots.txt и другие, которые не находятся в папке core , не обновляются при вызове composer update drupal/core или даже composer update .
Проблема решается установкой очередного композер-модуля drupal-composer/drupal-scaffold: composer require drupal-composer/drupal-scaffold .
По умолчанию модуль будет выкачивать все файлы из дистрибутива, которые находятся вне папки core , в том числе robots.txt и .htaccess , что нежелательно. Чтобы ограничить список файлов, нужно изменить опцию extra.drupal-scaffold.excludes . У композера есть команда для изменения настроек в секции extra, но:
Проблема 9: composer не умеет сохранять массивы в качестве значения опции
В extra.drupal-scaffold.excludes нужно сохранить массив файлов. Команда composer config этого сделать не может.
Вручную добавляем в секцию extra :
"drupal-scaffold":
Теперь при обновлении версии ядра друпала, будут обновляться «scaffold» файлы, за исключением .htaccess и robots.txt .
Проблема 10: при обновлении композер не может разрулить конфликты
При попытке выполнить composer update он начнёт выдавать дурацкие сообщения о том, что не может разрулить конфликты зависимостей. Помогает удаление нескольких строчек из конфига:
"include": [ "core/composer.json" ],
Теперь всё. Друпал скачан и готов к установке с последующим обновлением (не факт).
#!/usr/bin/env bash composer create-project drupal/drupal . --no-dev php -r ' $composer = json_decode(file_get_contents("composer.json"), true); unset($composer["replace"]); unset($composer["extra"]["merge-plugin"]["include"]); $composer["config"]["optimize-autoloader"] = true; $composer["extra"]["drupal-scaffold"]["excludes"] = [".htaccess", "robots.txt"]; file_put_contents("composer.json", json_encode($composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); '; composer require --update-no-dev \ drupal/core \ webflo/drupal-core-strict \ drupal-composer/drupal-scaffold \ drush/drush \ drupal/console vendor/bin/drupal site:install standard \ --db-type=mysql \ --db-name=drupal8 \ --db-user=mysql \ --db-pass=mysql \ --account-name=admin \ --account-pass=admin \ --account-mail="admin@localhost" \ --site-name="Drupal 8" \ --site-mail="admin@localhost" \ --langcode=ru \ --force
На самом деле есть ещё небольшая проблема. У меня почему-то всегда выкачиваются пакеты из секции require-dev . Я перепробовал миллион комбинаций и запретить скачивание никак не получается. Помогает только удаление composer.lock перед вызовом composer require .
Как итого. На дворе 2017 год. После релиза восьмёрки прошло два года. Дрис при каждом случае рассказывает про небывалые высоты, которых они достигли в DX . А я трачу выходные, чтобы правильно скачать (не установить!) Drupal 8. Вообще давно назревает продолжение статьи про свинью в помаде (старожилы вспомнят), но после такого нужно хлопать дверью, к чему я пока не готов 🙂 Посему продолжаем!
Написанное актуально для
Похожие записи
- Тюнинг кэширования блоков с формой
- Автоматическое удаление файлов после удаления сущности
- Фиксим вывод reCaptcha на AJAX формах
- Учебные материалы по Drupal 10
- Дружим reCAPTCHA v3 и PageSpeed
Комментарии
drupal-composer/drupal-project , де-факто, «правильный» вариант.
Получается что проблемы 4, 5 и 6 относятся только к шаблону drupal/drupal который мало кто использует.
Если шаблон drupal-composer/drupal-project не подходит, то можно очень легко сделать свой (займёт ~15 минут).
- Форкнуть drupal-project
- Отредактировать его (например изменить структуру директорий)
- Зарегистрировать пакеь на packegist.org
- Проверить как это работает composer create-project xandeadx/drupal-project
часть 1
А я полюбил композер, хотя по началу также недоумевал.
— Удобная система зависимостей, которая также умеет качать сторонние зависимости. Без композера это бы приходилось делать руками, так как ложить third-party либы с модулем на орге вроде как запрещено.
— Удобная система патчинга, которая сама патчит при обновлении и предупреждает что патч уже не подходит.
— Для создания нового проекта достаточно перекинуть composer.json от старого. Либо уже посмотреть в сторону drupal-project, я пока всё приглядываюсь и походу скоро решусь взять его. Хотя это и потребует изменения конфигов nginx на сервере, но это походу самый удобный вариант.
— Размер репозитория для D8 очень минимизирован, так как все контрибы, ядро и прочие зависимости подтягиваются композером.
— Возможность удобно подключать свои или чужие репозитории. Например GitHub проект для своих нужд. В composer.json будет всё предельно ясно и видно, откуда тащится, по каким критериям и куда ставится. Также композер поддерживает их в актуальном состоянии, если требуется.
— Композер умеет детектить изменения в момент обновления. Он может заметить что в файлы с кодом вносились изменения и предлагает несколько вариантов на выбор: обновить с заменой, оставить изменения, подготовить патч для изменений. Это очень удобно, хотя полностью перекрывается патчингом. Но если кто-то со стороны начудит, хотя бы не перетрется.
— Композер имеет свои «хуки» где можно писать свои команды или даже код под свои нужды. Можно задать чтобы после апдейта он делал drush updb, или же бекапил БД перед апдейтом.
часть 2
То что ты написал, да, минусы, но они с лихвой перекрываются плюсами которые дает композер. Подобные проблемы, как мне кажется, все же исправят или все перейдут на drupal-project.
Единственный не совсем очевидный момент, особенно для новичков, будет то, что проект лучше изначально полностью собирать через композер. Страница на drupal.org об этом умалчивает. Хотя надо брать пример с симфони, оставить возможность загружать только композером и решать проблемы из-за которых появляются drupal-scaffold. Для тех, кому интересен код, есть git репозитории. Никаких установок модулей драшем, никаких ручных установок с загрузкой по FTP (разве что для кастома), никаких установок из админки. Как по мне, установку модулей надо удалять из админки, и если хотят оставить инструменты, делать модуль с UI под композер.
Композер уже де-факто стандарт в 8-ке. Многие модули уже просто не поставить без него: Commerce, Search API, ImageMagick ещё какие-то популярные также имеют зависимости от либ которые качаются композером и грузятся его автолоадом. Когда человек на 8-ке нарвется на композер, вопрос лишь времени, и чем больше модулей переписывают заново под 8-ку, тем больше становится модулей которые ставятся только композером.
Сейчас улучшения должны пойти быстрее. Drupal 8.4+ поддерживается только Drush 9, там уже нет возможности качать модули, только включать и отключать. На dru.io мы даже специально блочили эту команду для старого драша. Осталось дождаться когда соберутся и потрут установку из админки через wget.
Не без недостатков, но после 2-3 проекта от композера остаются только приятные впечатления.
@cyberlex404 Lex M.
Полностью поддерживаю слова Niklan и рекомендую использовать https://github.com/drupal-composer/drupal-project во всех новых проектах. А так же переносить существующие под контроль composer.
drupal-composer/drupal-project – (© @vaplas) это здорово, пользуйтесь – не пожалеете.
Что касается /web/index.php — это легко решается небольшой подстройкой сервера. Только дописать /web к root директории.
А все свои модули можно успешно ставить через packegist.org
Конечно большое внимание стоит уделить при передаче проекта. У меня был случай когда я отдал бекап сайта.. На его структуру внимания не кто не обратил и обновили классическим способом перезаписав файлы поверх.. Всегда нужно смотреть в composer.json и проверять что это там стоит.
Если уж совсем привыкли к тому, чтобы не было промежуточной папки web, то можно решить вопрос правкой composer,json. Например вот так:
"extra": < "installer-paths": < "core": ["type:drupal-core"], "libraries/": ["type:drupal-library"], "modules/contrib/": ["type:drupal-module"], "profiles/contrib/": ["type:drupal-profile"], "themes/contrib/": ["type:drupal-theme"], "drush/contrib/": ["type:drupal-drush"] > >
@Вячеслав, ещё в autoload.php нужно будет путь исправить и сам composer.json переместить в document root.
P.S. Никто не сказал какой composer тормозной по сравнению с drush dl .
adubovskoy
P.S. Никто не сказал какой composer тормозной по сравнению с drush dl
да, точно, не нашел ссылок тут про composer global require hirak/prestissimo . Все равно медленнее, но уже не так катастрофично)
hirak, hirak и в продакшен
я уже сбежал с этого титаника 🙂 переходите на octobercms
Чтобы сбежать, нужно было сначала попасть туда.
Может вы там и не были вовсе ?
Чтобы сбежать, нужно было сначала попасть туда.
Может вы там и не были вовсе ?
Как вы его запускаете ?
Через консоль open-server не получилось.
Чтобы сбежать, нужно было сначала попасть туда. Может вы там и не были вовсе ?
попасть куда?
я сделал на drupal много сайтов за последние 4-5 лет, но не вижу больше смысла его использовать, он хуже october’a и технически, и в плане админки.
@cyberlex404 Lex M.
я сделал на drupal много сайтов за последние 4-5 лет, но не вижу больше смысла его использовать, он хуже october’a и технически, и в плане админки.
Сайты в студию! А мы оценим на предмет качества.
И не надо в блоге, уважаемого в сообществе человека, откровенно рекламировать какой то «самопис» 3-x авторов с платными модулями.
И что вы здесь потеряли? Сбежавших крыс на бал не приглашали.
@cyberlex404 Lex M.
Как вы его запускаете ?
Через консоль open-server не получилось.
В первую очередь Вы должны спросить себя знает ли консоль open-server что такое composer
А лучше всего завести себе VPS с Ubuntu или аналогом. Настроить себе окружение: nginx, mariadb, php7, composer, drush, drupal. И радоваться жизни.
ИМХО: open-server для школьников. И лично я
и близко не видел у себя ничего подобного.
Это bash скрипт. На винде можно запустить с помощью Cygwin или msysgit.
GoodSeeker
Спасибо за статью!
В первую очередь Вы должны спросить себя знает ли консоль open-server что такое composer
@cyberlex404 Lex M., с composer они знакомы, а вот код php -r ‘ . не даст выполнить в таком виде.
@cyberlex404 Lex M.
а вот код php -r ‘ . не даст выполнить в таком виде.
Приведенный пример актуален для drupal/drupal
Выше в комментариях мы уже рекомендовали использовать drupal-composer/drupal-project. Работает замечательно и без бубна.
@cyberlex404 Lex M., не пойму, зачем вы это пишите ?
Ограничения с консолью open-server уже прояснились.
Сайты в студию! А мы оценим на предмет качества. И не надо в блоге, уважаемого в сообществе человека, откровенно рекламировать какой то "самопис" 3-x авторов с платными модулями. И что вы здесь потеряли? Сбежавших крыс на бал не приглашали.
извините, а вы вообще кто?
при желании, по указанному мною нику гуглится аккаунт на drupal.ru, а там есть ссылка на портфолио.
с это довольно странно, что вы так эмоционально привязаны к движку, это все лишь инструмент для решения конкретных задач, у которого есть плюсы и минусы, а не религия, от которой нельзя отречься. И еще раз извиняюсь, я не знал что ваше величество ввело цензуру в блоге уважаемого автора.
Парни, прекращаем офтоп.
https://github.com/drupal-composer/drupal-project — все таки этот вариант более правильный, используем на куче проектов и никаких проблем
А вот мультисайтинг порезали похоже под D8. Он то работает, но с композером не дружит. И документации 0.
Коллеги, а что на данный момент наиболее правильно будет делать после создания проекта через Composer?
Я ставил текущую версию 8.4.2, используя первый (и основной, как я понимаю) вариант:
composer create-project drupal-composer/drupal-project:8.x-dev some-dir —stability dev —no-interaction
Посмотрел статью «Goodbye Drush Make, Hello Composer!», там рекомендуют либо
cd drupal/web ../vendor/bin/drush site-install --db-url=mysql://:@localhost/
т.е. воспользоваться Драшем (??), либо вручную:
Скопировать default.settings.php в settings.php, и открыть для записи.
Скопировать default.license.yml в license.yml , и открыть для записи.
Создать и открыть для записи директорию sites/files
Перейти по адресу EXAMPLE.COM/install для предоставления данных доступа к базе данных и следовать дальнейшим инструкциям.
Но статья двухлетней давности, с учётом более полной интеграции Композера в Друпал и сокращения функций Драша, хочется понять как действовать правильно дальше, чтобы всё идеально работало, когда переход на Композер станет полным.
Отдельно отмечу, что у меня виртуальный хостинг, но доступ по SSH есть и с памятью вроде не так плохо.
Установить друпал «неправильно» нельзя. Нравится drush — ставьте им, нравится install.php — ставьте из браузера, результат будет один.
Я понимаю, что вы имеете в виду: при «традиционной» установке (когда index.php в корне и т.д.) действительно, различий нет.
Но вот я, как и вы, тоже решил, что «лучше день потерять, потом за час долететь» и начал копать Композер. В процессе чтения стало понятно, что люди регулярно сталкиваются с затыками, т.к. есть неочевидные вещи.
Вот и сейчас, с учётом активно меняющейся ситуации, связанной с переходом на Композер, мне не совсем понятно, всё ли я делаю верно, с учётом того, что дальше придётся пользоваться только им?
Может быть за два года ситуация поменялась и даже при установке надо что-то учесть?
Я, например, пока ещё чувствую себя неуверенно при работе с Композером и предпочёл бы сделать сразу с заделом на будущее, чем потом разбираться с проблемами.
Присутствие композера никак не влияет на способ и процесс установки друпала. Композер управляет зависимостями и всё.
А процесс установки никак не может повлиять на композер и его дальнейшую нормальную работу?
А то я до этого 8-м друпалом не пользовался, только 6-м много лет назад.
Разумеется, сначала попробовал «обычную» установку. Так там, если не ошибаюсь, после ввода юзера/пароля/имени базы бежит прогресс бар, т.е. вполне возможно, что установка не только базу наполняет.
Спасибо, всё получилось установить через SSH, после пары взмахов бубном сайт заработал.
Однако не могу удержаться, чтобы узнать у вас ещё кое-что.
Я использовал другой вариант установки ( drupal-composer/drupal-project ), но думаю, что этот момент у нас общий:
У меня на шаред хостинге композер выставил странные разрешения на файлы и папки.
Например, у папок стоят 775, у файлов (в т.ч. .php) — 664, у autoload.php — вообще 666.
Я пока у /web/index.php и /web/ их не поменял, вообще получал Internal Server Error.
Как было у вас? Такая ситуация нормальна?
@cyberlex404 Lex M.
@Сергей
Что касается прав на папки композер делает все верно (права ставит скрипт внутри шаблона) скорее всего это проблема конфигурации хоста на сервере. (Лично у меня на своем vsp такой проблемы не было).
Я еще раз повторюсь: composer — это только менеджер пакетов. Он не как не влияет на работу $drush и $drupal , но забирает у них роль «скачивателя» модулей, тем и прочих библиотек.
Для обновления кода котрибных пакетов Вы используйте composer, а для работы с drupal из консоли: $drush or $drupal or etc.
Drush 8 вполне себе ставит Drupal 8
На дворе 2020, мало что изменилось в лучшую сторону. Похоже Дрис крутит друпал в сторону своего бизнеса(Acquia), ему не нужны конкуренты.
Почему же, с версии 8.8 с композером всё в порядке, друпал ставится одной командой
Установка может быть, но вот переход с 7 на 8 версию, это ужос. Мне как чайнику установить семерку было очень просто. С 8 версией проблемы начинаются уже с выбора хостинга, да и работа с командной строкой не добавляет юзабилити системе. Минус отсутствие многих модулей для 8-й версии, что также говорит о снижении популярности друпала 8-й версии. Imho
что также говорит о снижении популярности друпала 8-й версии.
Если говорить про снижение популярности среди чайников, вы правы
