Отключить редактирование записи во время обновления


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

Author: paul-m, 2012-03-08

2 answers

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

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

Рабочий процесс разработки/Тестирования/Продвижения

Вообще говоря, у нас есть по крайней мере три сервера в оптимальном рабочем процессе. Сервер "Разработки", на котором находится наш основной репозиторий управления версиями (если вы его еще не используете, я настоятельно рекомендую его!), "Промежуточный" сервер, на котором мы проводим последние раунды приемочного тестирования и начинаем добавлять контент по умолчанию, и живой "производственный" сервер, где все подается конечному пользователю.

Разработка/Тестирование/Продвижение в Drupal

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

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

Перемещение конфигурации в код

Однако как нам перенести конфигурацию в код? Модуль функций позволяет экспортировать конфигурацию наиболее популярных модулей в код как "функциональные модули" - фактически, все, что реализует экспортируемые CTools, является честной игрой. Вы даже можете добавить свои собственные крючки к этим экспортированным функциональным модулям и объединить их в профиль установки одним щелчком мыши развертывание (они все еще просто модули!).

В редких случаях, когда вы не можете достичь желаемой функциональности, используя только функции, и вам абсолютно необходимо взломать базу данных, вы можете сделать это с помощью пользовательского модуля или существующей экспортированной функции, используя hook_install() и hook_uninstall(). hook_update_N() может использоваться для добавочных обновлений, но не забудьте обновить hook_install(), чтобы отразить те же изменения!

Перемещение Содержимого

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

Тем не менее, теперь, когда конфигурация удалена из базы данных, становится намного проще просто переместить база данных вокруг как хранилище контента, а не мешанина контента и конфигурации.

В Заключение

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

 15
Author: David Watson, 2012-03-11 15:36:04

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

 0
Author: George, 2012-03-08 12:20:49