Включить зависимости новых модулей при развертывании
Как я могу автоматически включить новую зависимость, добавленную к пользовательской функции (или стандартным модулям) с помощью drush?
После получения нового кода мой сценарий развертывания в основном выполняется:
drush cc all
drush fra
Но мне нужно посетить страницу администратора/структуры/функций, если я добавил новые зависимости, в противном случае эти модули не включены. Как я могу этого избежать? Есть ли команда drush? Я не могу использовать drush en thenewmodule
, потому что я хочу сохранить свой сценарий развертывания общим.
6 answers
Существует проблема с запросом функций в очереди на удаление, просто наткнулся на нее. В донкихотепроект Drux - это команды, которые вам нужны:
Drux-включить-зависимости (dep-en) - Загрузка и включение зависимостей существующих модулей. drux-найти-устаревшие (obs) - Найти модули, которые не являются прямыми или косвенными зависимостями модулей, указанных в качестве аргументов drux-генерировать (obs-gen) - Сгенерировать список зависимостей[] = .. для копирования+вставки в модуль информационный файл. drux-список зависимостей (dep) - Список зависимостей, которые будут включены с помощью
drush dep-en
. (Текст справки кажется неправильным).
Таким образом, для выполнения поставленной задачи drush dep-en
должен выполнить эту работу.
Вы можете скачать его здесь.
ОБНОВЛЕНИЕ: Теперь доступно на github: https://github.com/donquixote/drupal-drux
Альтернативы, часть I
Как указал Джесси Пиньо в другом ответе, вы также можете запустить drush fr DEPENDENT_MODULE
.
Или вы можете запустить drush en DEPENDENT_MODULE
.
Разница в том, что для этих команд вам нужно знать "DEPENDENT_MODULE", который имеет добавленные зависимости.
С помощью drush dep-en
вы можете просто запустить команду без каких-либо аргументов, и она проверит все включенные модули на наличие зависимостей.
Альтернативы, часть II
Вместо таких команд drush в сочетании с зависимостями вы также можете использовать функцию hook_update_N() для включения дополнительных модулей. Это кажется обычной техникой для Drupal 7 проекты.
Смотрите ответ рубидия.
Обратите внимание, что вы также можете отменить только функцию зависимостей модуля, зависимости которого вы изменили, а затем запустить drush fra
:
drush fr -y [feature-module-name].dependencies && drush fra
Вы можете создать пользовательский модуль и перечислить все модули, которые вы хотите включить при развертывании, в качестве зависимостей этого модуля в его файле .info. Затем просто включите этот модуль при развертывании, чтобы включить все остальные модули. Drupal будет обрабатывать их зависимости. Если ваш модуль всегда имеет одно и то же имя, вы можете drush en custom-dependencies -y
или как вы хотите его назвать, и сделать содержимое файла .info этого модуля конкретным для каждого проекта.
Если вы пытаетесь включить новые модули при развертывании в уже построенный сайт, вы можете поместить module_enable()
внутри крючка обновления в уже включенный модуль. Это исчезнет в Drupal 8, но для текущих сайтов Drupal это работает нормально. Поэтому, если вы обновили существующий модуль, X таким образом, что он вводит новую зависимость от модуля Y, крючок обновления в модуле X.файл установки, который включает модуль Y, решит проблему.
Я решаю эту проблему, создавая пользовательский файл .install для моего функционального модуля и реализуя функцию hook_enable(). Вы можете включить каждую зависимость с помощью чего-то вроде:
if (!module_exists('dependency')) {
module_enable(array('dependency'));
}
Я также использовал этот метод для включения новых зависимостей через hook_update_N()
Попробуйте выполнить drush rq
и реализовать hook_requirements
:
function MODULE_requirements($phase){
if($phase != 'install'){
$module_info = drupal_parse_info_file(drupal_get_path('module', 'MODULE').'/MODULE.info');
$dependencies = $module_info['dependencies'];
$enable = module_enable($dependencies);
if(!$enable){
throw new Exception('Unresolved dependencies', 1);
}
}
return array();
}