Drupal Source Control Стратегия? - PullRequest
       25

Drupal Source Control Стратегия?

33 голосов
/ 12 ноября 2008

В стандартных проектах, основанных на php или исходном коде, мы легко храним весь код в SVN, и каждый разработчик может извлекать свои собственные копии и совместно работать над одним и тем же кодом.

Однако при разработке сайта на Drupal большая часть работы находится в «настройке». Помимо темы и модулей у вас нет никакого «исходного кода». Как вы запускаете несколько экземпляров одного и того же сайта, чтобы все разработчики могли работать одновременно и одновременно делиться своей работой?

Пример сценария:

Мы запускаем начальную версию сайта Drupal с созданным типом контента "X". Мы также первоначально запускаем представление на сайте, которое перечисляет все узлы типа "X" в хронологическом порядке. Клиент начинает пользоваться сайтом, добавлять контент, пункты меню и т. Д.

В следующем выпуске планируется добавить возможность поиска пользователей в этом представлении. Настройка для этого содержится в базе данных, хотя. Мы можем скопировать производственную базу данных в нашу версию для разработки, чтобы получить самые последние данные, пока мы работаем над изменением представления. Однако в течение этого времени клиент все еще может обновлять сайт, делая нашу базу данных dev не синхронизированной. Когда мы будем готовы перевести новый вид в рабочий режим, есть ли более простой способ сделать это, кроме как вручную повторить шаги для его настройки в производственной установке?

Ответы [ 7 ]

12 голосов
/ 05 января 2009

Я думаю, что хорошей стратегией здесь является использование API профиля установки. С помощью API установки профиля вы можете делать большинство вещей, которые используют инструменты администратора Drupal. Большинство основных форм просто устанавливают переменные в таблице переменных. Чтобы иметь возможность разумно создавать версии содержимого вашей базы данных без содержания, то есть конфигурации, целесообразно использовать функции обновления.

На моем сайте у нас есть модуль "ec", который очень мало отличается от того, что его файл ec.install содержит функции обновления, например. ec_update_6001 ()

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

function ec_install() {
  $ret = array();
  $num = 0;
  while (1) {
   $version = 6000 + $num;
   $funcname = 'ec_update_' . $version;
   if (function_exists($funcname)) {
     $ret[] = $funcname();
     $num++;
   } else {
     break;
   }
  }
return $ret;
}

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

// Create editor role and set permissions for comment module
function ec_update_6000() {
  install_include(array('user'));
  $editor_rid = install_add_role('editor');
  install_add_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));
  install_add_permissions(DRUPAL_AUTHENTICATED_RID, array('access comments', 'post comments', 'post comments without approval'));
  install_add_permissions($editor_rid, array('administer comments', 'administer nodes'));
  return array();
}
// Enable the pirc theme.
function ec_update_6001() {
  install_include(array('system'));
  // TODO: line below is not working due to a bug in Install Profile API. See http://drupal.org/node/316789.
  install_enable_theme('pirc');
  return array();
}

// Add the content types for article and mtblog
function ec_update_6002() {
  install_include(array('node'));
  $props = array(
    'description' => 'Historical Movable Type blog entries',
  );
  install_create_content_type('mtblog', 'MT Blog entry', $props);
  $props = array(
    'description' => 'Article',
  );
install_create_content_type('article', 'Article', $props);
return array();
}

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

Наконец, cck и views поддерживают этот подход. Посмотреть этот фрагмент кода

// Enable CCK modules, add CCK types for Articles in prep for first stage of migration,
// enable body for article, enable migration modules.
function ec_update_6023() {
  $ret = array();
  drupal_install_modules(array('content', 'content_copy', 'text', 'number', 'optionwidgets'));
  install_include(array('content', 'content_copy'));
  install_content_copy_import_from_file(drupal_get_path('module', 'ec') . '/' . 'article.type', 'article');
  $sql = "UPDATE {node_type} SET body_label='Body', has_body=1
  WHERE type = 'article'";
  $ret[] = update_sql($sql);
  return $ret;
} 
11 голосов
/ 12 ноября 2008

Я написал статью о безболезненном контроле версий Drupal с CVS и Subversion передовой практики некоторое время назад.

К сожалению, до сих пор существует проблема управления источником базы данных, как вы указали. Есть несколько предложенных методов, которые я упоминаю в дополнительном посте .

7 голосов
/ 10 июля 2010

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

Функции - Позволяет собирать вместе такие сущности, как типы контента, таксономия, представления, даже каналы. Мы используем это очень успешно, и это позволило поделиться этими изменениями между разработчиками.

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

Это решает самые большие проблемы с сохранением настроек сайта в базе данных. Однако они не идеальны. , , мы нашли модули, которые не были поддержаны или поддерживаются неправильно.

1 голос
/ 07 апреля 2011

К сожалению, здесь нет хорошего / простого решения. Проблема заключается в нежелательном побочном эффекте архитектуры не только Drupal, но и всех CMS типа фреймворка, в которых приложения определяются как через конфигурацию (то есть данные, хранящиеся в БД), так и через исходный код. Ни один из двух вариантов управления данными конфигурации не является отличным. Первое, что вы делаете: определите один БД как канонический (то есть производственный БД) и попросите разработчиков работать локально с моментальным снимком производственного БД и «объединить» новую информацию о конфигурации с производственным БД через ручную настройку через производственный сайт. интерфейс администратора. В случае четко определенных подсистем, т. Е. Представлений, вы можете воспользоваться преимуществами функций импорта / экспорта, разработанных для упрощения миграции этого типа конфигурации. Второй вариант - то есть автоматизация, которую, я думаю, вы ищете, - сложен, но может стоить - или необходим - для крупных проектов с бюджетом на сложную автоматизацию проектов: погрузитесь глубоко в структуру базы данных system / module и разработайте собственный сценарий для объединить новые данные конфигурации на уровне таблицы / записи в производственную базу данных, скажем, как часть ночной "сборки" последней базы данных. Боюсь, что промежуточного решения просто не существует.

С точки зрения контроля версий для исторического отслеживания данных конфигурации, такой модуль, как backup_migrate, позволяет выполнять автоматические дампы SQL базы данных. Вы можете выбрать, какие таблицы будут выгружаться, определив «профиль» резервной копии и создав тот, который оставлял из дампа большой контент, таблицы журналов и кэширования (например, node, cache_content, watchdog), чтобы у вас был более управляемый блок для управления версиями. , Некоторые простые скрипты на сервере или в другом месте могут получить последний дамп и добавить его в ваш репозиторий.

1 голос
/ 16 декабря 2008

Некоторые модули, такие как CCK и Views, позволяют экспортировать и импортировать свои установочные данные в виде текста. Вы можете сохранить эти текстовые представления в системе управления версиями.

1 голос
/ 14 ноября 2008

Вы можете избавить себя от необходимости настраивать и работать с SVN, как описано в статье Ника, если вы используете свойство svn: externals . Это будет автоматически поддерживать вашу локальную версию Drupal с указанной веткой Drupal, и вы сможете использовать точно такой же механизм для ваших модулей. Кроме того, поскольку SVN будет считывать определения внешних файлов из файла, вы также можете поместить их под контроль версий!

Я не думаю, что CVS имеет эквивалентную функцию. Тем не менее, довольно легко написать простой скрипт, который автоматически установит модуль Drupal, беря только URL (я сделал это для того, чтобы поддерживать свой собственный сайт Drupal в актуальном состоянии).

Что касается управления версиями базы данных, решить эту проблему гораздо сложнее. Я бы предложил экспортировать «стоковую» базу данных Drupal в файл SQL и поместить ее под контроль версий. Каждый разработчик будет иметь свой собственный локальный сервер базы данных для использования. Затем вы можете предоставить скрипт, который вернет указанную базу данных к вашей базовой версии, содержащейся в файле SQL.

В качестве примера того, как эта проблема решается другими способами, я опишу ситуацию на работе. Я работаю над веб-приложением; он не использует базу данных, поэтому не страдает от этих проблем. Наш способ обойти повторную настройку сайтов состоит в том, чтобы восстановить систему из системы контроля версий и предоставить программу для автоматического развертывания сайтов. Программа также используется нашими клиентами для создания сайтов.

0 голосов
/ 07 апреля 2011

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

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

См. Разработка -> Подготовка -> Проблема рабочего процесса в Drupal и разработка на основе кода : эффективное использование функций в презентации Drupal 6 и 7 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...