Стратегия управления исходным кодом Drupal?

Это побочная заметка, но в идиоматическом питоне вы часто увидите такие вещи, как:

if x is None: 
    # some clauses

Это безопасно, потому что гарантированно будет один экземпляр объекта Null (т. е. None) .

33
задан D-Rock 13 November 2008 в 21:39
поделиться

5 ответов

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

На моем сайте у нас есть на модуле "ЕС", которое делает очень мало кроме, имеют, это - 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 и представления поддерживают этот подход. Посмотрите этот фрагмент кода

// 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;
} 
12
ответ дан 27 November 2019 в 19:28
поделиться

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

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

11
ответ дан 27 November 2019 в 19:28
поделиться

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

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

До управления версиями база данных затронута, это - намного более хитрая проблема решить. Я предложил бы экспортировать базу данных Drupal "запаса" в файл SQL и поместить это при управлении версиями. У каждого разработчика был бы их собственный локальный частный сервер базы данных для использования. Вы могли тогда предоставить сценарий, который вернется указанная база данных к Вашей версии запаса, содержавшейся в файле SQL.

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

1
ответ дан 27 November 2019 в 19:28
поделиться

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

1
ответ дан 27 November 2019 в 19:28
поделиться

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

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

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

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

7
ответ дан 27 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: