30
Drupal: организация разработки

Drupal -organizaciya_razrabotki

Embed Size (px)

Citation preview

Page 1: Drupal  -organizaciya_razrabotki

Drupal: организация  разработки

Page 2: Drupal  -organizaciya_razrabotki

Генеральный спонсор и организатор конференции DrupalConf 2011

При поддержке:

Page 3: Drupal  -organizaciya_razrabotki

Спонсоры

Информационные спонсоры

Сайт конференции

Page 4: Drupal  -organizaciya_razrabotki

Почему разработчики плачут?

Drupal клевый: • гибкость• настраиваемость• собираем из функциональных блоков что угодно• мощь инструментов Views, CCK, Rules и т.д.

 В чем же проблема?

Page 5: Drupal  -organizaciya_razrabotki

Почему разработчики плачут?

OMG, настройки в БД: • Включенные модули и их настройки • Блоки, словари, типы контента CCK• Роли пользователей, настройки прав• настройки Views, Rules и др.

 Возникновение ошибок и трата времени:• миграция изменений с сервера на сервер• миграция изменений между разработчиками

 

Page 6: Drupal  -organizaciya_razrabotki

Простой workflow

1. Несколько разработчиков, каждый работает на своем локальном сервере: нужно делиться изменениями

2. Тестовый сервер: нужно переносить настройки и контент3. Боевой сервер: нужно переносить настройки, сохраняя

контент 

Page 7: Drupal  -organizaciya_razrabotki

Что делать?

Что нам нужно:• отслеживать изменения в конфигурации• переносить изменения в конфигурации

Подходы:• работать с миграциями изменений в БД• настройки - в код (code-driven development): экосистема

Features

Page 8: Drupal  -organizaciya_razrabotki

Drush: лучший друг разработчика

• cc - очистка кэша• dl, en, dis - работа с модулями • sql-dump, sql-sync - работа с дампами БД• rsync - синхронизация файлов• remote-backup, remote-restore - бэкапы

Page 9: Drupal  -organizaciya_razrabotki

Migraine: наш опыт

• Migraine by Noosphere Networks http://ashearer.com/software/server-administration/migraine 

• модификация для D6 by mukesh.agarwal17 http://www.blisstering.com/migraine-synchronize-your-development-staging-and-production-sites-databases-drupal-6

• drush• скрипты для drush от Данила Семеленова

 Подробнее про Migraine• http://www.slideshare.net/drupalindia/migraine-drupal-

syncing-your-staging-and-live-sites-presentation

Page 10: Drupal  -organizaciya_razrabotki

Что делает Migraine

Migraine: разделение таблиц• config_tables: blocks blocks_roles boxes, filters

filter_formats, imagecache_action, imagecache_preset...• content_tables*: node, node_revisions, search_dataset,

search_index, term_data, term_node... • temp_tables: accesslog, watchdog...• cache_tables: cache, cache_block, cache_filter,

cache_menu, cache_page, cache_views...• ignore_tables: ...

_______________________________________________* - все таблицы content_type_* и content_field_* определяются как контентные автоматически

Page 11: Drupal  -organizaciya_razrabotki

Расширения Drush

Оболочка для команд Migraine

1. migrate-db-dump — создание дампа локальной БД 2. migrate-db-restore — восстановление БД из локального

дампа3. migrate - полная миграция сайта, включая исходные

файлы и БД4. sync - cинхронизация файлов локальной версии сайта с

удаленной.

Page 12: Drupal  -organizaciya_razrabotki

Что еще нужно подготовить

1. /sites/xxxx для всех площадок2. aliases.drushrc.php: алиасы площадок @dev, @test,

@prod, реквизиты доступа (см. drush/examples/example.aliases.drushrc.php)

3. settings.php для индивидуальных настроек внутри /sites/xxxx

Page 13: Drupal  -organizaciya_razrabotki

Migraine: workflow

Разработчик 11. Работаем над кодом и конфигурацией 2. Делаем дамп migrate-db-dump (можно повесить на pre-

commit hook для git)o  возможно, занесение новых таблиц в tables.py или

tables.php3. commit, push

 Разработчик 21. pull (возможно, разрешаем конфликты)2. Делаем migrate-db-restore3. Изменения в конфигурации мигрировали

Page 14: Drupal  -organizaciya_razrabotki

Migraine: workflow

drush @dev migrate @test:1. drush @dev migrate-db-dump2. drush @dev sync @test3. миграция БД

 drush @dev migrate @prod:– drush @dev migrate-db-dump– drush @dev sync @prod– миграция БД (кроме содержимого контентных таблиц)

1.(возможно) изменение схемы контентных таблиц (при изменении типов данных через CCK)

 

Page 15: Drupal  -organizaciya_razrabotki

Migraine: плюсы и минусы

Хорошо:• таблицы классифицированы - больше думать не надо• нет зависимости от предоставления модулями каких-то

интерфейсов для экспорта-импорта  Плохо:• в случае конфликтов разбираться в дампах тяжело,

легко ошибиться• каша остается кашей• все равно приходится думать

Page 16: Drupal  -organizaciya_razrabotki

Features

Code-driven development!

Конфигурация - в код! 

Features так или иначе умеют: типы нод, поля CCK,

таксономия, imagecahe, роли и права, Views, Rules...

Page 17: Drupal  -organizaciya_razrabotki

Features: экосистема

• Features • Ctools exportables• Strongarm - переменные • Boxes - кастомные блоки (альтернатива стандартному

add block) • Context - блоки, breadcrumbs и т.д. • Diff - инструмент для работы с различиями в состояниях

feature

Page 18: Drupal  -organizaciya_razrabotki

Анатомия feature

feature - это модуль• feature_name.info - мета-информация, зависимости• feature_name.module - место для кастомного кода• feature_name.features.inc • feature_name.install

 Фрагменты конфигурации:

• feature_name.context.inc • feature_name.features.content.inc• feature_name.views_default.inc• feature_name.features.user_permission.inc• ...

Page 19: Drupal  -organizaciya_razrabotki

Возможные состояния feature

Features сравнивает для feature: • состояние кода (1)• предыдущее состояние кода (2)• актуальное состояние (обычно в БД) (3)

 В зависимости от разницы между ними:• Default: (1) == (3) или (3) не существует, для обновления

feature достаточно обновления кода• Overridden: (1)!=(3), для обновления feature нужно

сделать revert •  Needs review: (1)!=(2)!=(3), для обновления нужно

разбираться вручную• Rebuildable (для faux-exportables): (1)!=(3), (3)==(2)

Page 20: Drupal  -organizaciya_razrabotki

Workflow отдельно взятой feature

Разработчик 1 1. Создание2. Включение3. Работа по изменению конфигурации4. Обновление кода5. commit, push

 Разработчик 2 1. pull2. Установка/Обновление из кода3. Конфигурация перенесена!

Page 21: Drupal  -organizaciya_razrabotki

Управление Features

• Веб-интерфейс• Drush

• drush features (fl) - список всех доступных feature• drush features-export (fe) [feature name] [component list]

- создание новой feature с указанными компонентами• drush features-update (fu) [feature name] - из БД в код• drush features-revert (fr) [feature name] - из кода в БД• drush features-diff (fd) [feature name] - различия между

состоянием в кодe и в БД

Page 22: Drupal  -organizaciya_razrabotki

Feature: без UI

Создание 1. feature_name.info: мета-информаци, зависимости и т.д.2. feature_name.module:

include_once('feature_name.features.inc');3. feature_name.features.inc4. drush en feature_name5. drush fu feature_name

Добавление чего-нибудь1. Добавляем зависимость в .info (например: features[views]

[] = "view_news")2. drush fu feature_name

Page 23: Drupal  -organizaciya_razrabotki

Подумаем о других

Изменения не сводятся только к конфигурации. Но feature - модуль, поэтому есть hook_install() и hook_update(). • включение модулей• добавление ролей• добавление словарей• любой код• ...

hook_update() - делимся с теми, кто работает параллельноdrush updatedb -y && drush cc allhook_install() - делимся с новыми разработчиками

Page 24: Drupal  -organizaciya_razrabotki

Controller Feature: центр управления всем остальнымВключаются все остальные features:dependencies[] = "feature_name_1"dependencies[] = "feature_name_2"... hook_update и hook_install - отражают общие изменения в состоянии системыfunction feature_controller_update_6003() {$return = array();$modules = array('feature_name_1', 'feature_name_2');drupal_install_modules($modules);$return[] = array('success' => TRUE, 'query' => 'Enabling some cool features');return $return;}

Page 25: Drupal  -organizaciya_razrabotki

Features: собираем все вместе

1. project.profile: включаем необходимые модули и Controller Feature

2. Работаем: пишем код, добавляем модули, меняем структуру и настройки, разрабатываем и подключаем новые features.

3. Поддерживаем актуальность .install Controller Feature (пишем код вручную).

4. Поддерживаем актуальность кода остальных features (drush fu feature_name)

5. Вся история в репозитории в виде кода!

Page 26: Drupal  -organizaciya_razrabotki

Features

Хорошо:• с кодом легко работать в системе контроля версий• законченные куски функционала, которые можно

использовать повторно• красиво

  Плохо: • требует больше внимания к вынесению изменений в

код • на самом деле сложно правильно разделить на куски из-

за зависимостей• не все компоненты exportable (решаемо)

Page 27: Drupal  -organizaciya_razrabotki

Credits

• http://nuvole.org/blog/code-driven-development• http://developmentseed.org/blog

Page 28: Drupal  -organizaciya_razrabotki

Контакты

Анна Федорук [email protected] http://devteam.sterno.ru/@sternodevteam

Page 29: Drupal  -organizaciya_razrabotki

Генеральный спонсор и организатор конференции DrupalConf 2011

При поддержке:

Page 30: Drupal  -organizaciya_razrabotki

Спонсоры

Информационные спонсоры

Сайт конференции