サイトを大規模に再編成するためのスクリプトを作成するために、サイトのリーダーシップと協力して、YAML設定ファイルから駆動される多数のRubyスクリプトレットをパッケージ化するためのシンプルなフレームワークを作成しました。これにより、ステージングサイトにバックアップを復元し、スクリプトを実行し、フィードバックを得て、YAMLの数行を変更し、バックアップを復元し、新しい設定でスクリプトを実行し、満足するまで繰り返すことができます。
私のサイトには600行近くの設定があり、UIを介した手動操作では到底できません。一度も、ましてや正しく行うために何度も繰り返すことはできません。前回、大規模な変更を提案したときに、試すのを文字通り断念したからです。対照的に、このスクリプトを使用すると、サイトには約50万件の投稿と100以上のカテゴリがあるにもかかわらず、イテレーションごとに数分で全体のサイクルを完了できます。これにより、サイトのリーダーシップから迅速なフィードバックを得ることができ、サイトを迅速に移行する準備が整います。
より詳細なドキュメントは、リポジトリのREADMEファイルにあります。
このスクリプトにはエラーチェック機能はありません。ライブサイトで実行するのは非常に危険です。ステージングサイトで実行し、結果を確認してから本番環境に適用することを目的としています。作成者である私もそのように実行するつもりです。ライブサイトで直接実行すると、破損した場合、すべての破片を自分で保持することになります。 ![]()
ドキュメントによると、設定ファイルは次のようになります。
---
- describe:
context: Old Name
category: 7
name: New Name
description: New description of category
slug: new-slug
- movePosts:
context: move only faq posts from the Support category to the Documentation category
source: 3 # Support category ID
target: 6 # Documentation category ID
withTag: faq
hide: false # do not hide the Support category when done
- movePosts:
context: consolidate How-To category into documentation with how-to tag
source: 8 # How-To category ID
target: 6 # Documentation category ID
addTag: how-to
hide: true # hide the old How-To category, visible only to Admin
実行中の進捗出力は次のようになります。
==========
Move hidden categories out of the way so they don't clutter admin view
setHiddenCategory: {:category=>11}
==========
Rename Old Name to New Name
describe: {:category=>7, :name=>"New Name", :description=>"New description of category", :slug=>"new-slug"}
==========
move only faq posts from the Support category to the Documentation category
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
ただし、このスクリプトが完全に必要すべてを満たす可能性はかなり低いです。これは本当にフレームワークであり、数行のコードでスクリプト化されたサイト変更の自動化をさらに容易にする新しいアクションを簡単にドロップできます。数行のコードで1つのメソッドを定義するだけで、YAMLファイルから適切に呼び出すことができます。
サイトの整理を改善することを考えていましたが、UIを使用することに躊躇したり、ステージングサイトでテストを複製して変更を本番環境に適用できるかどうかをどのように信頼できるか疑問に思ったりしていませんか?ぜひ見て、ご意見をお聞かせください!