Чтобы автоматизировать перестройку большого сайта Discourse в сотрудничестве с руководством, я написал простой фреймворк для упаковки множества небольших Ruby-скриптов, управляемых через YAML-файл конфигурации. Это позволяет мне восстанавливать резервную копию на тестовом сайте, запускать скрипт, получать обратную связь, вносить изменения в несколько строк YAML, снова восстанавливать резервную копию, запускать скрипт с новой конфигурацией и повторять процесс до достижения желаемого результата.
У меня почти 600 строк конфигурации для моего сайта, и ручное изменение всего этого через интерфейс просто невозможно. Даже один раз, не говоря уже о многократных попытках сделать всё правильно. Я знаю это, потому что в прошлый раз, когда я предложил внести масштабные изменения, я буквально сдался. Напротив, с помощью этого скрипта я теперь могу завершить весь цикл всего за несколько минут на каждой итерации, даже если на сайте около полумиллиона сообщений и более 100 категорий. Это позволяет мне быстро получать обратную связь от руководства и быть готовым к быстрому переносу моего сайта.
Более подробная документация находится в файле README в репозитории с кодом:
Этот скрипт не выполняет проверку ошибок. Запускать его на рабочем сайте крайне опасно. Он предназначен для использования на тестовом сайте, проверки результата, и только после этого переноса на рабочий. Как автор, я всё ещё планирую использовать его именно так. Если вы запустите его напрямую на рабочем сайте и что-то пойдёт не так, вы останетесь со всеми последствиями. ![]()
Согласно документации, файл конфигурации может выглядеть так:
---
- describe:
context: Старое имя
category: 7
name: Новое имя
description: Новое описание категории
slug: new-slug
- movePosts:
context: переместить только FAQ-посты из категории Поддержка в категорию Документация
source: 3 # ID категории Поддержка
target: 6 # ID категории Документация
withTag: faq
hide: false # не скрывать категорию Поддержка после завершения
- movePosts:
context: объединить категорию Как сделать в Документацию с тегом how-to
source: 8 # ID категории Как сделать
target: 6 # ID категории Документация
addTag: how-to
hide: true # скрыть старую категорию Как сделать, видна только администраторам
Вывод прогресса во время выполнения может выглядеть так:
==========
Скрыть категории, чтобы они не загромождали вид администратора
setHiddenCategory: {:category=>11}
==========
Переименовать Старое имя в Новое имя
describe: {:category=>7, :name=>"Новое имя", :description=>"Новое описание категории", :slug=>"new-slug"}
==========
переместить только FAQ-посты из категории Поддержка в категорию Документация
movePosts: {:source=>3, :withTag=>"faq", :target=>6}
==========
Чтобы использовать это, поместите ваш YAML-файл в /var/discourse/shared/app/tmp/rearrange.yaml, затем выполните:
cd /var/discourse
./launcher enter app
git clone https://github.com/johnsonm/discourse-site-rearranger.git script/discourse-site-rearranger
ruby script/discourse-site-rearranger/rearrange.rb /shared/tmp/rearrange.yaml
Однако, вполне вероятно, что этот скрипт не сделает всё именно так, как вам нужно. Это действительно фреймворк, который позволяет очень легко добавлять новые действия, автоматизирующие дополнительные аспекты изменения сайта, всего несколькими строками кода. Всё, что вам нужно сделать, — определить один метод с несколькими строками кода, и вы сможете вызывать его из YAML-файла.
Думали ли вы об улучшении организации вашего сайта, но боялись использовать интерфейс, или задавались вопросом, как убедиться, что вы сможете воспроизвести свои тесты на тестовом сайте перед внесением изменений на рабочий? Посмотрите и расскажите, что вы думаете!