• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Drupal  -organizaciya_razrabotki
 

Drupal -organizaciya_razrabotki

on

  • 419 views

 

Statistics

Views

Total Views
419
Views on SlideShare
374
Embed Views
45

Actions

Likes
0
Downloads
1
Comments
0

2 Embeds 45

http://drupalconf.ru 32
http://www.drupalconf.ru 13

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Drupal  -organizaciya_razrabotki Drupal -organizaciya_razrabotki Presentation Transcript

    • Drupal: организация  разработки
    • Генеральный спонсор и организатор конференции DrupalConf 2011 При поддержке:
    • Спонсоры Информационные спонсоры Сайт конференции
    • Почему разработчики плачут?
      • Drupal клевый:
      •  
        • гибкость
        • настраиваемость
        • собираем из функциональных блоков что угодно
        • мощь инструментов Views, CCK, Rules и т.д.
      •  
      • В чем же проблема?
    • Почему разработчики плачут?
      • OMG, настройки в БД:
        • Включенные модули и их настройки
        • Блоки, словари, типы контента CCK
        • Роли пользователей, настройки прав
        • настройки Views, Rules и др.
      •  
      • Возникновение ошибок и трата времени:
        • миграция изменений с сервера на сервер
        • миграция изменений между разработчиками
      •  
    • Простой workflow
        • Несколько разработчиков, каждый работает на своем локальном сервере: нужно делиться изменениями
        • Тестовый сервер: нужно переносить настройки и контент
        • Боевой сервер: нужно переносить настройки, сохраняя контент
      •  
    • Что делать?
      • Что нам нужно:
        • отслеживать изменения в конфигурации
        • переносить изменения в конфигурации
      • Подходы:
        • работать с миграциями изменений в БД
        • настройки - в код (code-driven development): экосистема Features
    • Drush: лучший друг разработчика
        • cc - очистка кэша
        • dl, en, dis - работа с модулями
        • sql-dump, sql-sync - работа с дампами БД
        • rsync - синхронизация файлов
        • remote-backup, remote-restore - бэкапы
    • 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
    • Что делает 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
        • migrate-db-dump — создание дампа локальной БД
        • migrate-db-restore — восстановление БД из локального дампа
        • migrate - полная миграция сайта, включая исходные файлы и БД
        • sync - cинхронизация файлов локальной версии сайта с удаленной.
    • Что еще нужно подготовить
        • /sites/xxxx для всех площадок
        • aliases.drushrc.php: алиасы площадок @dev, @test, @prod, реквизиты доступа (см. drush/examples/example.aliases.drushrc.php)
        • settings.php для индивидуальных настроек внутри /sites/xxxx
    • Migraine: workflow
      • Разработчик 1
        • Работаем над кодом и конфигурацией
        • Делаем дамп migrate-db-dump (можно повесить на pre-commit hook для git)
          •   возможно, занесение новых таблиц в tables.py или tables.php
        • commit, push
      •  
      • Разработчик 2
        • pull (возможно, разрешаем конфликты)
        • Делаем migrate-db-restore
        • Изменения в конфигурации мигрировали
    • Migraine: workflow
      • drush @dev migrate @test:
        • drush @dev migrate-db-dump
        • drush @dev sync @test
        • миграция БД
      •  
      • drush @dev migrate @prod:
        • drush @dev migrate-db-dump
        • drush @dev sync @prod
        • миграция БД (кроме содержимого контентных таблиц)
          • (возможно) изменение схемы контентных таблиц (при изменении типов данных через 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
        • Создание
        • Включение
        • Работа по изменению конфигурации
        • Обновление кода
        • commit, push
      •  
      • Разработчик 2
        • pull
        • Установка/Обновление из кода
        • Конфигурация перенесена!
    • Управление 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
      • Создание
        • feature_name.info: мета-информаци, зависимости и т.д.
        • feature_name.module: include_once('feature_name.features.inc');
        • feature_name.features.inc
        • drush en feature_name
        • drush fu feature_name
      • Добавление чего-нибудь
        • Добавляем зависимость в .info (например: features[views][] = "view_news")
        • 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: собираем все вместе
        • project.profile: включаем необходимые модули и Controller Feature
        • Работаем: пишем код, добавляем модули, меняем структуру и настройки, разрабатываем и подключаем новые features.
        • Поддерживаем актуальность .install Controller Feature (пишем код вручную).
        • Поддерживаем актуальность кода остальных features (drush fu feature_name)
        • Вся история в репозитории в виде кода!
    • Features
      • Хорошо:
        • с кодом легко работать в системе контроля версий
        • законченные куски функционала, которые можно использовать повторно
        • красиво
      •  
      • Плохо: 
        • требует больше внимания к вынесению изменений в код 
        • на самом деле сложно правильно разделить на куски из-за зависимостей
        • не все компоненты exportable (решаемо)
    • Credits
        • http://nuvole.org/blog/code-driven-development
        • http://developmentseed.org/blog
    • Контакты Анна Федорук [email_address]   http://devteam.sterno.ru/ @sternodevteam
    • Генеральный спонсор и организатор конференции DrupalConf 2011 При поддержке:
    • Спонсоры Информационные спонсоры Сайт конференции