Включить зависимости новых модулей при развертывании


Как я могу автоматически включить новую зависимость, добавленную к пользовательской функции (или стандартным модулям) с помощью drush?

После получения нового кода мой сценарий развертывания в основном выполняется:

drush cc all
drush fra

Но мне нужно посетить страницу администратора/структуры/функций, если я добавил новые зависимости, в противном случае эти модули не включены. Как я могу этого избежать? Есть ли команда drush? Я не могу использовать drush en thenewmodule, потому что я хочу сохранить свой сценарий развертывания общим.

Author: 4life, 2013-06-26

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 проекты.

Смотрите ответ рубидия.

 6
Author: Mołot, 2018-11-05 14:29:39

Я не думаю, что есть способ полностью автоматизировать эту задачу.

Но вы могли бы использовать главный модуль для записи ваших зависимостей в код. Master предоставляет платформу для настройки зависимостей модулей в параметрах автоматического развертывания.

 5
Author: Nebel54, 2013-07-02 13:29:12

Обратите внимание, что вы также можете отменить только функцию зависимостей модуля, зависимости которого вы изменили, а затем запустить drush fra:

drush fr -y [feature-module-name].dependencies && drush fra
 4
Author: Jesse Pinho, 2013-12-13 02:11:01

Вы можете создать пользовательский модуль и перечислить все модули, которые вы хотите включить при развертывании, в качестве зависимостей этого модуля в его файле .info. Затем просто включите этот модуль при развертывании, чтобы включить все остальные модули. Drupal будет обрабатывать их зависимости. Если ваш модуль всегда имеет одно и то же имя, вы можете drush en custom-dependencies -y или как вы хотите его назвать, и сделать содержимое файла .info этого модуля конкретным для каждого проекта.

Если вы пытаетесь включить новые модули при развертывании в уже построенный сайт, вы можете поместить module_enable() внутри крючка обновления в уже включенный модуль. Это исчезнет в Drupal 8, но для текущих сайтов Drupal это работает нормально. Поэтому, если вы обновили существующий модуль, X таким образом, что он вводит новую зависимость от модуля Y, крючок обновления в модуле X.файл установки, который включает модуль Y, решит проблему.

 0
Author: beth, 2013-07-01 16:59:53

Я решаю эту проблему, создавая пользовательский файл .install для моего функционального модуля и реализуя функцию hook_enable(). Вы можете включить каждую зависимость с помощью чего-то вроде:

if (!module_exists('dependency')) {
  module_enable(array('dependency'));
}

Я также использовал этот метод для включения новых зависимостей через hook_update_N()

 0
Author: reubidium, 2013-07-16 16:34:18

Попробуйте выполнить 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();
}
 0
Author: Cinedin, 2015-07-01 12:52:10