Как использовать модуль Features в среде 3 dev?


19

Работая над проектом, интенсивно используя функции , иногда для этого приложения есть 3 разработчика.

Мы попробовали несколько подходов, но когда мы объединяем наши ветки git, кажется, что мы часто «перезаписываем» изменения функций друг друга. Конфликтов предостаточно, кажется, что он ломает функциональный модуль, делая его болезненным в использовании.

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

Есть ли рабочий процесс или процедура, которая снижает риски конфликтов и перезаписывает?

Любые подсказки о возможностях приветствуются.

Ответы:


20

Добро пожаловать в страну F нкции C onfiguration M ПРАВЛЕНИЕ, иначе ТСМ ! Речь идет не только о возможностях , но и не об управлении конфигурацией (как представлено в Drupal версии 8). Вместо этого, он является частным случаем S oftware C onfiguration M ПРАВЛЕНИЕ , иначе SCM . Главным образом потому, что функции можно рассматривать как генератор кода, в то время как этот сгенерированный код необходимо перенести через несколько сред. Читайте дальше для более подробной информации.

1 - Плюсы и минусы использования функций

Преимущества использования функций

  • Автоматизируйте развертывание изменений, примененных к сайту разработки Drupal, на одном или нескольких целевых (до) рабочих сайтах Drupal (вместо развертывания вручную).
  • Облегчает совместное использование (отправку) текущей разработки Drupal между разработчиками / создателями сайтов Drupal (например, чтобы сделать некоторые представления, созданные экспертом по представлениям, доступными для Drupal Themer, работающей на другом сайте разработки, для темы этого представления).
  • Отличная интеграция с GIT и Drush для отправки копии кода, сгенерированного компонентами (на сайте разработки), на выбранные целевые (предварительные) производственные сайты.

Недостатки использования функций

  • Предотвращение конфликтов функций и / или управление зависимостями функций может быть сложной задачей!
  • Нелегко начать использовать Функции на существующем (производственном) сайте.
  • Установить / включить модуль « Функции » легко (просто модуль), но научиться правильно использовать функции - это сложная задача.

2 - Техника для упаковки деталей

Использование функций зависит от вашего собственного воображения, как упаковать (составить) содержимое функции. Вот некоторые методы, которые могут быть использованы для этого.

Единственная супер функция

Это довольно простая техника упаковки: все упаковано вместе в одну функцию (некоторые называют это «Богом» ...). Кажется, легко, довольно вперед и т. Д. Но эта техника также приводит к «конфликтам» (как описано ниже) более или менее сразу ...

Хорошим примером для этого может служить создание «Drupal-дистрибутива», где предполагается, что все его пользователи используют один и тот же набор модулей, конфигурацию и т. Д. Если, однако, такой дистрибутив состоит из нескольких функциональных возможностей веб-сайта (не использовать слово «функции» ...), кажется более подходящим разделить такие функции на несколько функций, как описано ниже.

Основано на функциональности сайта

Этот метод упаковки создает отдельную функцию для каждой функциональности веб-сайта, например:

  • Функция A = реализовать " * Галерея ".
  • Функция B = реализовать " * Блог ".
  • Функция C = реализовать « * Календарь событий ».

Основано на разделах администрирования Drupal

Этот метод упаковки создает отдельные функции для каждого из (основных) разделов администрирования веб-сайта Drupal, который используется для создания сайта, таких как:

  • Все необходимые модули содержатся в функции A,
  • Все определения базовых полей содержатся в функции B,
  • Все типы контента содержатся в функции C,
  • Все разрешения содержатся в функции D,
  • Все роли содержатся в функции E,
  • Все переменные содержатся в функции F,
  • Все (пользовательские) Просмотров содержатся в функции G,
  • Все (пользовательские) правила содержатся в функции H,
  • И т.п.

Приведенный выше список практически неограничен: в конце концов, вы можете даже подумать, что это 1 функция для каждой опции меню администратора Drupal ... если вы хотите зайти так далеко.

ИМО это также самый рекомендуемый подход к функциям пакета.

3 - Уменьшение вероятности конфликтов в функциях и / или GIT

Не используйте повторно поля

Похоже, что некоторые конфликты вызваны повторным использованием полей между несколькими типами контента. Например, в типе контента A у вас есть поле с именем машины field_somefield, которое также используется в качестве поля в типе контента B с тем же именем машины, field_somefieldно в качестве другого типа поля и / или других настроек поля, которые отличаются.

Не повторно используя поля между типами контента, вы избегаете работы в этой проблеме. Взгляните на интересное соглашение об именах для имени компьютера ваших типов контента и полей, как показано в таблице Wrapping Information Architecture and Documentation , которая является частью статьи о « Модель относительности для Drupal ». Подробнее об этом см. Мой ответ на вопрос « Как моделировать контент (типы) с точки зрения базы данных? ».

Сплит функции в зависимости от того, кто работает над чем

Если над одним сайтом работают несколько человек, количество конфликтов может быть уменьшено путем организации (= создания отдельных) функций в зависимости от того, кто над чем работает. Иллюстрация этого может быть как в этом примере:

4 - Рекомендуемые среды Drupal

Все вышеперечисленное должно помочь как-то облегчить использование Функций . Однако, чтобы гарантировать, что все будет работать как положено (спроектировано), вам также необходимо иметь соответствующий набор сред (логически связанных сайтов Drupal) по следующим причинам:

  • объединить функциональность, предоставляемую несколькими функциями.
  • предсказывать и разрешать конфликты.
  • тестирование конечным пользователем всех объединенных функций, которые сертифицированы на отсутствие конфликтов.

В идеальном мире эти логически связанные сайты Drupal должны быть настроены и использованы следующим образом:

  1. Персональный сайт разработчика - у каждого разработчика сайта есть отдельный сайт разработчика. Когда какая-то часть разработки готова поделиться с кем-то другим, создается соответствующая функция, которая отправляется в промежуточную среду.
  2. Sandbox Site - это среда Drupal, которая содержит только ядро ​​Drupal, используемое для модульного тестирования полноты одной функции. Если у функции, случайно, есть некоторые неожиданные зависимости (например, от какого-то модуля, от которого зависит функция, который не включен в Песочнице), тогда эта зависимость станет очевидной.
  3. Промежуточный сайт - это место, куда доставляется одна или несколько функций (созданных на сайте разработчика). Это может быть просто исправление для некоторой производственной проблемы, или это может быть место, где объединены все разработки для новой версии сайта. Если какие-либо конфликты между несколькими функциями существуют, то это среда, в которой они впервые обнаружатся ... и должны быть как-то разрешены.
  4. Сайт QA - после того, как промежуточная среда считается стабильной, пришло время перейти к соответствующим функциям и сделать их доступными также на более высоком уровне, где они могут быть использованы для тестирования качества, приемочного тестирования, объемного тестирования и т. Д. На этом уровне вы следует быть предельно осторожным при разрешении любых дополнительных изменений (если таковые имеются). Потому что любое такое изменение может сделать недействительными все предыдущие попытки тестирования, уже выполненные в этой среде.
  5. Сайт теневого производства. Чтобы подготовить активацию в реальном производстве, вы можете сначала продвинуть соответствующие функции в среду, которая считается копией (тенью) вашей реальной производственной среды. Если в этот момент во время процесса миграции что-то все еще не работает, тогда это красный флаг, чтобы отменить некоторые из ваших предыдущих шагов. Исправьте это и попробуйте снова, пока все вовлеченные стороны не одобрят изменения.
  6. Производственные площадки - если вы выполнили все предыдущие шаги, то этот шаг должен быть понятен и довольно прост. В зависимости от ваших потребностей, это может быть отдельный сайт или что-то, эквивалентное мульти-сайтам Drupal, тогда как на всех задействованных сайтах используются одни и те же версии всех функций.
  7. Базовый сайт - по моему опыту, не так много (если вообще вообще существует) реализаций Drupal, где используется этот тип сайта (также). Это просто копия сайта (-ов) производства, но доступная для разработчиков, тестировщиков и т. Д. Drupal, которую можно использовать для проверки того, как выглядят рабочие сайты, или для обучения пользователей и т. Д. И в любое время для новой разработки. цикл начинается, компоненты сайта, которые будут затронуты (должны быть изменены), должны быть «как-то скопированы», используя этот базовый сайт в качестве входных данных, с целью в качестве целевого сайта персонального развития .

Очевидно, что приведенный выше перечень типов сайтов на Drupal подобен идеальному миру. В зависимости от размера вашей команды разработчиков и / или доступных бюджетов для их создания и обслуживания не все из них могут быть использованы (или доступны по цене). Этот инвентарь смоделирован на основе передового опыта в области SCM и используется в основном во всех крупных / глобальных корпорациях (банки, авиакомпании и т. Д.).

5 - Связанные модули

Сильная рука

Модуль Strongarm позволяет экспортировать переменные (из модулей, которые хранят свои настройки в переменных) с помощью модуля Features.

Узел Экспорт

Модуль Node export позволяет пользователям экспортировать узлы, а затем импортировать их в другую установку Drupal.

Роль экспорта

Модуль экспорта ролей позволяет ролям иметь имена_компьютеров и генерирует уникальный идентификатор роли (рид) на основе имени_компьютера. Роли можно экспортировать с помощью функций и получить точно такие же пометки, если они импортированы на другие сайты.

Особенности Banish

Модуль « Изгнание функций » позволяет полностью исключить отдельные компоненты функций из пользовательского интерфейса функций и экспорта функций. Вот цитата об этом со страницы проекта:

 Этот модуль полезен, когда есть компоненты компонентов, которые вы хотите, чтобы НИКОГДА не экспортировался. Если вы используете функции для создания или развертывания сайта, вы, вероятно, столкнулись с проблемой случайного экспорта переменных временной метки, таких как cron_last или update_last_check. Вы также можете отменить разрешения для модулей разработчика, чтобы они не были захвачены остальными разрешениями сайта, которые вы хотите экспортировать. Изгнанные предметы не будут отображаться в вашем функциональном модуле ИЛИ ЛЮБОМ ДРУГИХ МОДУЛЯХ ФУНКЦИЙ, поэтому используйте их с осторожностью. Центральный список функций, которые никогда не следует экспортировать, см. По адресу https://www.drupal.org/node/2400531.

BEAN

Модуль Bean делает ваши блоки экспортируемыми. Вот цитата об этом со страницы проекта:

Думайте о Bean как о методе предоставления новых типов (по сравнению с узлом это будет тип контента), который затем предоставляет интерфейс добавления контента, чтобы создать столько блоков, сколько вам нужно (см. Скриншот ниже). Содержимое компонента может быть размещено вокруг сайта, как и любой другой блок.

Этот модуль также прекрасно работает в сочетании с модулями интеграции функций UUID и UUID . Этот модуль был запущен только с D7, но он уже включен в ядро ​​Drupal 8. Видеоруководство Учебное пособие по модулю Drupal Bean - пользовательский интерфейс Bean Admin - это отличное введение, позволяющее по-настоящему понять всю мощь этого модуля и то, что вы можете с ним сделать (используя только методы построения сайтов, без специального кодирования).

Среда обитания

Модуль Habitat имеет больше смысла в рабочем процессе на основе функций . Вот цитата об этом со страницы проекта:

При настройке нескольких сред (например, prod, test, dev, local) есть несколько модулей, которые вы хотите всегда включать или отключать в определенных средах. Каждый раз, когда вы синхронизируете базу данных, вы должны повторно включать / отключать одни и те же модули. Хуже того, вы становитесь ленивыми и оставляете модули разработки включенными на производстве.

Среда обитания предоставляет настройки для включения или отключения определенных модулей в каждой среде (среде обитания). Просто установите переменную с помощью, например, $ conf ['габарита'] = 'local'; в вашем файле settings.php (фактическая переменная для использования настраивается для вашего текущего рабочего процесса). Отключение / включение модулей производится на hook_init.

6 - Рекомендуемые ресурсы:

7 - Возможные альтернативы использованию функций

Если вы не можете или не хотите (пока) использовать Функции , тогда вы можете проверить, в какой степени представленные ниже подходы / модули могут предоставить какую-то альтернативу.

Ручной экспорт / импорт

Это общеизвестные средства (чтобы избежать словесных возможностей ...), доступные через интерфейс администратора, для таких модулей, как Правила , Представления и т. Д. (Неполный список!).

Bundle copy

Некоторые люди рассматривают модуль копирования Bundle как возможную альтернативу. Имеет поддержку экспорта / импорта для:

  • Типы узлов.
  • Таксономия.
  • Пользователь.
  • Поля API полей.
  • Полевые группы.

1
Лучший ответ, который я когда-либо видел.
Нет Sssweat

@ NoSssweat Merci за похвалы ... но знаю, что я считаю это все еще довольно неполным. Например, в нем практически ничего не говорится о «жизненном цикле» функций обработки, и еще ничего не говорится о таких вещах, как анализ воздействия, аудит, управление выпусками, авторизация, и, и, и (еще дюжина тем или около того).
Pierre.Vriens

1
@ Pierre.Vriens - Спасибо! Думаю, я пришел к такому же выводу, как и твой превосходный ответ на трудном пути. Я пробовал подход разделения по компонентам (views_views, зависимости и т. Д.), Но у меня возникали конфликты при попытке создать функцию. Я понял -> после ->, что мне, вероятно, нужно было настроить функцию, чтобы не проверять зависимости и игнорировать конфликты.
stefgosselin

7

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

Только зафиксировать предполагаемые изменения кода.

Что это значит? Это означает, что каждый разработчик должен просмотреть код перед фиксацией. Не существует «волшебства» для предотвращения непреднамеренных изменений кода без осторожности разработчика.

  • Обзор изменений кода с git diff.
  • Создайте патч для быстрого git diff > blah.patchизменения и вручную измените патч, включив в него только предполагаемые изменения конфигурации.
    • Такие вещи, как «mtime», экспорт комментариев в информационный файл не обязательно должны быть включены в коммит.
    • Я стал достаточно опытным в рассмотрении блоков различий кода конфигурации с течением времени. Теперь легче обнаружить лишние изменения в представлениях или панелях, и быстрый 10ddввод избавляется от изменений в патче (например).
    • Я думаю: «О, эй, я не изменил ничего, что связано с полями, поэтому я не буду фиксировать featurename.features.field_base.inc».
  • Никогда не используйте git commit -a. Это ужасная практика, от которой следует отказаться. Всегда добавляйте и фиксируйте явно!
  • Используйте git rebaseв локальных ветках Git, чтобы убедиться, что эта функция наиболее актуальна.
  • Стратегия git merge может также помочь, когда выполняется слияние:
    • git merge -s recursive -X patience (требуется git 1.7+ iirc).

Наконец, рассмотрите возможность добавления социальных ограничений для разработчиков, чтобы разработчик должен был проверить свой код, прежде чем сливать его в trunk / stable либо с проверкой исправления или запросом извлечения. Люди будут сердиться на социальные ограничения, но они должны сердиться на себя за то, что они не пересматривают свой код.


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