Drupal: организация разработки. Генеральный спонсор и организатор конференции DrupalConf 2011 При поддержке:

Презентация:



Advertisements
Похожие презентации
Генеральный спонсор и организатор конференции DrupalConf 2011 При поддержке:
Advertisements

Ершов Андрей ARDAS Group Инсталляционные профили, создание сборок.
Drush и Drupal администрирование. План Зачем Drush? Что это такое? Установка Drush Основные команды Установка Drupal через командную строку Минусы Drush.
Построение сообществ на Drupal, интеграция с сервисами Google Анна Федорук, Клера Виленская Sterno.Ru.
Мастер-класс «Привет, Drupal!». Партнер мастер- класса
Практическое использование модуля Panels Виктор Богуцкий.
Кожемякин Артём Дмитриевич Технический директор (совладелец) Исполнительный директор (совладелец) Эксперт консультант [интернет магазин][образовательный.
Git в экосистеме Drupalа Вадим Валуев Много.ру. Контроль версий: когда и зачем Сборка простого сайта через настройки – контроль версий не нужен Разработка.
Системы управления взаимоотношениями с клиентами. Drupal CRM Core. Вадим Миргород
Непрерывная интеграция - шаг к непрерывному деплойменту Drupal expert Игорь Родионов.
Разработка модуля для CMS Drupal на примере разработки плагина для модуля CCK Роман Архаров.
Миграция данных с помощью Feeds для кликеров. Когда использовать Агрегирование данных Перенос данных с других платформ Перенос данных с Drupal 6 на Drupal.
Об агентстве 10 сотрудников 4 года работы 100+ клиентов (проектов) 5 внутренних направлений 03 декабря 2011 г.DrupalConf Moscow.
Сайт «Профессиональная ориентация молодежи в области информационных технологий»
Инструментарий начинающего разработчика Drupal Колосов Алексей, IT-Patrol inc.
Инструментальные средства визуальной коммуникации и прикладной дизайн Лекция 3.
Разработка видеокаталога ShowSpy.org на Drupal Александр Л. samik.name.
Эрмитаж. Новая концепция интерфейса платформы «1С-Битрикс 9.5»
WebMonitor План Установка Установка на кластеры и NLB Лицензирование Работа продукта Процесс обновления Решение общих проблем.
Миграция системы Ва-Банк ST с СУБД Oracle 8i на СУБД Oracle 10g Release 2 ХI Конференция пользователей АБС Ва-Банк, 10 ноября 2006 г., Москва.
Транксрипт:

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

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

Спонсоры Информационные спонсоры Сайт конференции

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

Почему разработчики плачут? OMG, настройки в БД: Включенные модули и их настройки Блоки, словари, типы контента CCK Роли пользователей, настройки прав настройки Views, Rules и др. Возникновение ошибок и трата времени: миграция изменений с сервера на сервер миграция изменений между разработчиками

Простой workflow 1.Несколько разработчиков, каждый работает на своем локальном сервере: нужно делиться изменениями 2.Тестовый сервер: нужно переносить настройки и контент 3.Боевой сервер: нужно переносить настройки, сохраняя контент

Что делать? Что нам нужно: отслеживать изменения в конфигурации переносить изменения в конфигурации Подходы: работать с миграциями изменений в БД настройки - в код (code-driven development): экосистема Features

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

Migraine: наш опыт Migraine by Noosphere Networks модификация для D6 by mukesh.agarwal17 development-staging-and-production-sites-databases- drupal-6 drush скрипты для drush от Данила Семеленова Подробнее про Migraine syncing-your-staging-and-live-sites-presentation

Что делает 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_* определяются как контентные автоматически

Расширения Drush Оболочка для команд Migraine 1.migrate-db-dump создание дампа локальной БД 2.migrate-db-restore восстановление БД из локального дампа 3.migrate - полная миграция сайта, включая исходные файлы и БД 4.sync - cинхронизация файлов локальной версии сайта с удаленной.

Что еще нужно подготовить 1./sites/xxxx для всех площадок 2.aliases.drushrc.php: @prod, реквизиты доступа (см. drush/examples/example.aliases.drushrc.php) 3.settings.php для индивидуальных настроек внутри /sites/xxxx

Migraine: workflow Разработчик 1 1.Работаем над кодом и конфигурацией 2.Делаем дамп migrate-db-dump (можно повесить на pre- commit hook для git) o возможно, занесение новых таблиц в tables.py или tables.php 3.commit, push Разработчик 2 1.pull (возможно, разрешаем конфликты) 2.Делаем migrate-db-restore 3.Изменения в конфигурации мигрировали

Migraine: workflow migrate-db-dump 3.миграция БД migrate-db-dump –миграция БД (кроме содержимого контентных таблиц) 1. (возможно) изменение схемы контентных таблиц (при изменении типов данных через CCK)

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

Features Code-driven development! Конфигурация - в код! Features так или иначе умеют: типы нод, поля CCK, таксономия, imagecahe, роли и права, Views, Rules...

Features: экосистема Features Ctools exportables Strongarm - переменные Boxes - кастомные блоки (альтернатива стандартному add block) Context - блоки, breadcrumbs и т.д. Diff - инструмент для работы с различиями в состояниях feature

Анатомия 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...

Возможные состояния 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)

Workflow отдельно взятой feature Разработчик 1 1.Создание 2.Включение 3.Работа по изменению конфигурации 4.Обновление кода 5.commit, push Разработчик 2 1.pull 2.Установка/Обновление из кода 3.Конфигурация перенесена!

Управление 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 и в БД

Feature: без UI Создание 1.feature_name.info: мета-информаци, зависимости и т.д. 2.feature_name.module: include_once('feature_name.features.inc'); 3.feature_name.features.inc 4.drush en feature_name 5.drush fu feature_name Добавление чего-нибудь 1.Добавляем зависимость в.info (например: features[views][] = "view_news") 2.drush fu feature_name

Подумаем о других Изменения не сводятся только к конфигурации. Но feature - модуль, поэтому есть hook_install() и hook_update(). включение модулей добавление ролей добавление словарей любой код... hook_update() - делимся с теми, кто работает параллельно drush updatedb -y && drush cc all hook_install() - делимся с новыми разработчиками

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; }

Features: собираем все вместе 1.project.profile: включаем необходимые модули и Controller Feature 2.Работаем: пишем код, добавляем модули, меняем структуру и настройки, разрабатываем и подключаем новые features. 3.Поддерживаем актуальность.install Controller Feature (пишем код вручную). 4.Поддерживаем актуальность кода остальных features (drush fu feature_name) 5.Вся история в репозитории в виде кода!

Features Хорошо: с кодом легко работать в системе контроля версий законченные куски функционала, которые можно использовать повторно красиво Плохо: требует больше внимания к вынесению изменений в код на самом деле сложно правильно разделить на куски из- за зависимостей не все компоненты exportable (решаемо)

Credits

Контакты Анна Федорук

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

Спонсоры Информационные спонсоры Сайт конференции