Подтвердить что ты не робот

Стратегии развертывания Drupal DATABASE?

Из этого пункта: Какая стратегия развертывания Drupal лучше всего?... Цитата:

Базы данных сложнее; очистка базы данных dev/staging DB и ее перенос в самый простой путь для первоначального развертывания, но при создании инкрементных обновлений БД есть несколько морщин, если пользователи на реальном сайте также генерируют контент.

Мне нужны идеи о том, как это сделать? В настоящее время я получаю полную копию существующего db на своей локальной машине, фиксирую эту подрывную деятельность, а затем развертываю всю базу данных. В настоящее время файл равен 15megs, и каждый раз, когда мне приходится загружать весь файл (я думаю, subversion видит его как целый новый файл, потому что он имеет так много изменений каждый раз).

Итак, мои вопросы действительно:

  • Как я могу получить размер Db вниз при совершении (кроме случаев, когда реже)?
  • Есть ли другой способ сохранить синхронизацию базы данных db и сервера? особенно учитывая, что пользователи будут публиковать новые данные все время?
4b9b3361

Ответ 1

Есть ли другой способ сохранить синхронизацию моей базы данных db и сервера? особенно учитывая, что пользователи будут публиковать новые данные все время?

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

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

Возникают проблемы, особенно с кросс-зависимостями (если люди пишут функции обновления более чем в одном модуле), и может потребоваться время, чтобы закодировать что-то, что является относительно незначительным изменением в админе. Установить профиль api помогает в этом.

Например

function mysite_update_6000() {
  install_include(array('user'));
  $editor_rid = install_add_role('editor');
  install_add_permissions(DRUPAL_ANONYMOUS_RID, array('do something'));
  install_add_permissions($editor_rid, array('do something', 'administer nodes'));
  return array();
} 

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

Существует также модуль migration, который может помочь в этом, он регистрирует изменения в таблицах и сохраняет их в функции обновления. Это не следует путать с модулем миграции drupal.org, который предназначен для переноса контента.

У нас был некоторый успех, но также некоторые проблемы с модулем features, который может помочь с переносом функций.

Ответ 2

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

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

Для них мы в некоторой степени использовали Migraine (см. также эта связанная дискуссия). Это не модуль Drupal, а python script, который мы немного адаптировали к нашим потребностям. Он нацелен на создание несколько структурированных дампов, разделение контента, предоставленного пользователем, из настроек и других материалов, что позволяет проводить более выборочные обновления и стратегии размещения. Но, учитывая более или менее хаотичную структуру базы данных Drupal (особенно отсутствие контроля ссылочной целостности), использование этого подхода требует постоянной настройки при добавлении новых модулей и довольно рискованно, так как нужно сделать лишнее обеспечение дампа/обновления только когерентных наборов таблицы.

Мы стараемся минимизировать необходимость "оптовых" операций дампа/обновления с помощью функций обновления наших пользовательских модулей, и мне нравится предложение французского француза о добавлении модуля 'dummy' только для возможности добавления функций обновления для других настроек

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


PS: Резервное копирование и миграция - это модуль Drupal, который, похоже, использует подход, похожий на подход Migraine script, но я еще не использовали его.

Ответ 3

Хенрик и Джереми дали отличные ответы на состояние развертывания. Я также слышал о том, что Капистрано (рубин) используется для хорошего эффекта. DrupalCampLA Case Study описывает механизм развертывания, который они использовали (включая Capistrano), и, как говорят, пакет загрузки включает их развертывание script (s).

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

Ответ 4

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

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