Отключить редактирование записи во время обновления
Я хотел бы отключить доступ пользователей к администрации во время обновлений, таких как исправления ошибок и добавления новых типов контента и т.д. Я не совсем уверен в том, как этого добиться. Каким бы ни было лучшее решение, перевод сайта в режим обслуживания - это не вариант.
2 answers
Похоже, вы столкнулись с общей проблемой развертывания с Drupal: тот факт, что содержимое и конфигурация находятся в одной базе данных. Как правило, это приводит к сбою в большинстве стратегий развертывания, поскольку вы начинаете сталкиваться с проблемами всякий раз, когда вам приходится объединять существующий пользовательский контент (часто движущуюся цель) с изменениями конфигурации вышестоящего уровня.
В зависимости от того, как еще у вас могут быть настроены настройки, это может включать или не включать радикальные изменения в ваш рабочий процесс, хотя это обычно рекомендуемое решение для таких проблем. Я не уверен, насколько у вас большой опыт в этих темах, поэтому я собираюсь разбить его по частям на благо всех, кто сталкивается с подобными проблемами.
Рабочий процесс разработки/Тестирования/Продвижения
Вообще говоря, у нас есть по крайней мере три сервера в оптимальном рабочем процессе. Сервер "Разработки", на котором находится наш основной репозиторий управления версиями (если вы его еще не используете, я настоятельно рекомендую его!), "Промежуточный" сервер, на котором мы проводим последние раунды приемочного тестирования и начинаем добавлять контент по умолчанию, и живой "производственный" сервер, где все подается конечному пользователю.
Разработка/Тестирование/Продвижение в Drupal
Как упоминалось выше, тот факт, что база данных содержит как содержимое, так и конфигурацию, делает ситуацию довольно запутанной. Трудно проверить базу данных в системе контроля версий, это делает конфигурацию намного менее переносимой, и большинство попыток отделить содержимое и конфигурацию являются столкнулся с разочарованием (например, с блокировкой определенных привилегий при внесении серьезных обновлений на сайт).
Поговорка "конфигурация движется вперед, контент движется назад" в рабочем процессе разработки/этапа/продукта по-прежнему остается верной, как лучшая практика с Drupal. Мы хотим вложить в код как можно больше настроек, удалив его из базы данных, чтобы отделить их друг от друга. Таким образом, мы можем продвигать функции в рамках рабочего процесса в обычном режиме, а затем брать контент с живого сайта и при необходимости верните его разработчику, не мешая пользователю.
Перемещение конфигурации в код
Однако как нам перенести конфигурацию в код? Модуль функций позволяет экспортировать конфигурацию наиболее популярных модулей в код как "функциональные модули" - фактически, все, что реализует экспортируемые CTools, является честной игрой. Вы даже можете добавить свои собственные крючки к этим экспортированным функциональным модулям и объединить их в профиль установки одним щелчком мыши развертывание (они все еще просто модули!).
В редких случаях, когда вы не можете достичь желаемой функциональности, используя только функции, и вам абсолютно необходимо взломать базу данных, вы можете сделать это с помощью пользовательского модуля или существующей экспортированной функции, используя hook_install()
и hook_uninstall()
. hook_update_N()
может использоваться для добавочных обновлений, но не забудьте обновить hook_install()
, чтобы отразить те же изменения!
Перемещение Содержимого
При необходимости контент из промежуточной версии также может быть перенесен в живую используя решение, подобное Модуль развертывания . Таким образом, вы можете отправлять обновления с разработки на промежуточный этап, а затем использовать режим обслуживания на промежуточном этапе только тогда, когда отлаженная функциональность передается от разработчика. Вы также можете использовать его для отправки контента с вашего живого сайта обратно на сервер разработчиков, чтобы у вас всегда был легкий доступ к последнему живому контенту.
Тем не менее, теперь, когда конфигурация удалена из базы данных, становится намного проще просто переместить база данных вокруг как хранилище контента, а не мешанина контента и конфигурации.
В Заключение
Это сложная и давняя проблема в Drupal, и у нее нет быстрого решения, хотя я использовал описанный выше рабочий процесс в нескольких проектах с высокой степенью успеха. Я был бы рад уточнить любые части своего ответа.
В зависимости от того, насколько сложны ваши роли, у вас может быть ограниченная роль, в которую все ограниченные пользователи временно перемещаются на время выполнения обновлений, а затем возвращаются к своей обычной роли после завершения обновлений.