Как обрабатывать включение новых модулей с помощью Drush через makefile


8

На работе мы переходим к настройке наших новых сайтов в git и занимаемся локальной разработкой. До сих пор я создал файл drush make вместе с профилем установки, и у меня есть этот сценарий через puppet, так что когда пользователь делает свежий клон репозитория, он загружает все пакеты и запускает базовую установку сайта. Это работает хорошо.

Теперь у меня вопрос, когда мне нужно использовать новый модуль для сайта. Например, мы строим новый модуль для сайта. Я хочу, чтобы другие разработчики извлекли из git и автоматически установили новый модуль. Добавление его в файл drush make только приведет к его загрузке, а запуск «drush si» приведет к переустановке сайта, уничтожив все данные.

Какой лучший способ сделать это?

редактировать

Я чувствую, что не объяснил это должным образом. Я ищу способ автоматического включения модулей на основе записей make-файла в drush. Идея состоит в том, что пользователь извлекает проект, и тогда я получу кукольный запуск 'drush make' и 'drush si', если файла settings.php не существует. Что мне нужно выяснить, так это то, когда в следующий раз, когда пользователь делает пул, и мы добавили новый модуль, как автоматически включить его с помощью некоторого сценария. Если мне понадобится, я напишу что-нибудь, чтобы разобрать make-файл и запустить 'drush en' вручную, но я бы хотел найти что-то предварительно подготовленное для этого.


"drush en" не то, что вы хотите случайно?
Sam152

Мне нужен способ автоматизировать это. 'drush en' может быть запущен из CLI, но мне нужен способ определить, какие модули являются новыми, и автоматически включить их.
dragonmantank

1
Проблема в том, что наличие модуля в виде набора файлов не означает, что вы хотите, чтобы он был включен. Кто-то должен принять это решение. Например, если вы загружаете Views, вы также получаете интерфейс Views. Вы хотите, чтобы это было включено или нет? Это сознательное решение. Таким образом, вам нужен список модулей, и он также может быть в сценарии.
Альфред Армстронг

Извини, забудь об этом. Я понимаю, что вы имеете в виду, хотя я не уверен в том, что все это делается через make.
Альфред Армстронг

1
@AlfredArmstrong идея заключалась в том, что, поскольку мне уже нужно курировать файл make, просто использовать его каким-то образом. Если я хочу включить devel, но не devel_generate, то в файле make будет только devel. Если бы я позже решил включить devel_generate, я бы добавил это в файл make. Я не хочу делать это только на основании того, какие файлы доступны конкретно по указанной вами причине, поэтому мне нужно каким-то образом это контролировать.
dragonmantank

Ответы:


4

Я работал в компании, у которой был большой поток разработчиков, сценариев и программ, которые пытались максимально автоматизировать процесс. Все должно было быть сделано в коде, по сценарию с использованием функций или обновлений.

По сути, вам нужно иметь 1 пользовательский модуль, который содержит хуки обновления. Таким образом, когда разработчик извлекает обновление для базы кода, он запускает обновление базы данных, и это может выполнить любое включение / отключение модуля. Перехватчики обновлений не влияют на новую установку, поскольку предполагается, что модуль уже обновлен, и будет выполнять только новые обновления.

Обобщить:

  1. Продолжайте использовать свой профиль установки для выполнения необходимых задач установки (включение модулей и т. Д.).
  2. Используйте пользовательский модуль «update», который использует hook_update_NXXX (), чтобы включить / отключить новые модули и в противном случае синхронизировать административные задачи вашего сайта.

Вот пост, в котором рассказывается о похожем подходе и приводятся примеры кода.


1

Это большой вопрос. drush makeудобно для скачивания модулей. Мы не хотим вносить вклад в раздувание модулей. За здесь дело сделано не распространяться makeтаким образом. Возможно, функции лучше всего подходят для управления состоянием модуля модуля сайта, а также для других аспектов конфигурации.


1

Рассмотрите возможность изменения вашего рабочего процесса.

Похоже, вы хотите выполнять распределенную работу и «делиться» включающими модулями и другими значениями конфигурации ... каким-то образом.

Если вы думаете об этом - даже «ядро» Drupal и Drupal.org этого не делают. Код передается в модули Core и сообщества, которые выполняются в процессе непрерывной сборки. Drupal.org и многие проекты используют Jenkins.

Для установки Jenkins, ориентированной на разработку Drupal, он также использует Phing, см. Это git-репозиторий: http://reload.github.io/jenkins-drupal-template/

Используя Jenkins, вы можете перенести код в свое мастер-репозиторий Git и создать сайт для демонстрационного сайта из своего Установочного профиля и Drush Makefile. Это не решит вашу проблему точно, но предоставляет вам 1 место, куда вы все нажимаете change (s) для добавления / включения / удаления модулей, и, надеюсь, вы все не «нарушаете сборку».

Предполагая, что сборка не нарушена - безопасно вносить изменения в локальную систему разработки.

Jenkins + сервер Staging or Development - это только 1 часть разработки.

Ваш локальный рабочий процесс может использовать установочные профили + make-файлы. Рассмотрите возможность совместного использования контента с помощью пользовательских модулей с помощью Migrate, если вы можете позволить себе время генерации контента. Примеры обмена контентом с разработчиками, использующими Migrate и Phing, можно прочитать здесь:

http://marzeelabs.org/blog/2014/03/17/coding-as-a-team-content-fixtures/ http://marzeelabs.org/blog/2014/03/03/coding-as-a- команда-автоматизации, используя-Phing /

И, наконец, посмотрите этот PDF-файл на сессии из Drupal Camp Ohio 2014, посвященной непрерывной интеграции и работе с вашей командой:


1

Для этой же цели мы используем Мастер . Он использует файл settings.php для предоставления информации о главных модулях. С простой командойdrush master-execute все отсутствующие модули (и их зависимости) включаются, а модули, которые больше не используются, отключаются.

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


0

Вы можете включить модули либо вручную, выбрав опцию Модули, либо с помощью терминала, используя команду drush.

drush en -y modulename1 modulename2 

и так далее.


Я ищу способ автоматизировать это на основе make-файлов, а не только как включить модуль вручную.
dragonmantank

0

Модули можно включить двумя способами:

  1. либо из терминала, используя команду drush :
    A. drush dl modulename- для загрузки модуля в первую очередь
    B. drush en -y modulename- для включения модуля

  2. Используя пункт меню Module, а затем включив модуль из числа отображаемых модулей.


Я ищу способ автоматизировать это на основе make-файлов, а не только как включить модуль вручную.
dragonmantank

Есть еще несколько способов. module_enable()например. Или импортируя подготовленную базу данных.
leymannx

0

Я хочу, чтобы некоторые это были уверены. Функция make используется для загрузки различных частей сайта: модуля, тем и проекта через git. Когда вы записываете свой профиль установки, вы записываете в информационный файл зависимые модули. Проблема в том, когда вам нужно добавить новый модуль для вашего профиля установки для существующего профиля - я прав?

Для этого вам нужно использовать hook_update_N, когда N обозначает обновление номера. Хук используется для модуля, который должен выполнять такие действия, как: обновление схем, добавление переменных и их использование для сайтов и распространение, например OpenScholar, для включения новых загруженных модулей на действующий сайт.

Возможно, вам нужно добавить это в самый общий модуль, и функция будет выглядеть следующим образом: https://github.com/openscholar/openscholar/blob/SCHOLAR-3.x/openscholar/modules/os/os.install#L16

Хук должен быть расположен в файле module.install. Если вы используете пользовательский интерфейс, вам нужно перейти на www.site.com/update.php, а если вы используете drush, просто используйте команду drush updb.


0

Как я понимаю, файл Drush .make загружает только проекты с drupal.org, если вы хотите включить некоторые модули, можете сделать это с помощью профиля установки ** (. Install) **. Профиль установки дает вам варианты, какие модули вы хотите включить во время установки.

Недавно я также добавил один дистрибутив с помощью файла .make. Даже я поделился всем опытом .make здесь . Я знаю, что это не связано с тем, что именно вы спрашиваете, но может помочь вам понять, что именно делает файл .make.

Так что из всей этой задачи, насколько я понимаю, с помощью файла .make нельзя автоматизировать включение модуля. Для этого вам нужно следовать другому подходу.

Я надеюсь, что этот URL форума поможет вам. Автоматизация Drupal с использованием сценариев Bash и Drush .

Вам нужно написать некоторый bash-скрипт, в котором именно вы будете использовать команды Drush.

drush en -y modulename

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.