私のphpBB移行ジャーニー(postgresql)

ソフト削除された投稿が通常の投稿としてインポートされ(表示される)、これは明らかに問題です。ユーザーはデフォルトでソフト削除を行うと考えており、削除された投稿には機密情報が含まれる可能性があるためです。

関連する列には、post_delete_userpost_delete_timepost_visibilitypost_delete_reason が含まれます。

post_visibility のみが関連しているようです。他の列の値は、投稿がソフト削除されてから復元された場合でもクリアされません。通常 = 1、非表示 = 2 です。

私の修正は、ソフト削除された投稿を破棄することです。なぜなら、誰も気にしないからです。

移行前にソースDBでこれを実行してください。

DELETE FROM phpbb_posts WHERE post_visibility = 2;
「いいね!」 1

貧乏人の「継続的移行」パイプラインがあります。これは、次のようなタスクを実行するためのシェルスクリプトの集まりです。

  • リモートサーバーからphpbbのDB、添付ファイルなどをプルする
  • Discourseインスタンスを作成/管理する
  • テンプレートインスタンスからDiscourseインスタンスが作成されるときに特定のsite_settingsが適用される
  • それらをバックアップ/復元する
  • Gitリポジトリの特定のインポートスクリプトで移行を実行する
  • 移行後のタスクを実行する

基本的に、これにより、私がいじくり回すことができる移行前のDiscourse dctemplateインスタンスで作業できます。Discourseの設定を好みに合わせて調整し続けます。

夜間、ライブの既存のphpbbからプルし、最新のテンプレートから作成された新しいDiscourseインスタンス(dcstaging)で新しい移行を実行します。

もちろん、これには数時間かかるため、非常に小さなDBを実行しているローカルphpbbもあり、移行スクリプトをテストおよび改善するために使用します。別のDiscourseインスタンス(dcdev)でテストするために、比較的迅速な移行を実行できます。

そのため、日中のテストワークフローは次のようになります。

テンプレートでいくつかの作業を行い、現在の状態が気に入りました。

./dc_template_create.sh dctemplate

おっと、テンプレートに間違いがありました。以前の状態に復元します。

./dc_template_restore.sh dctemplate

いくつかのことをテストするために、迅速な移行を実行します。

# 新しいインスタンスdcdevをdctemplateから作成します(dcdevに特定のsite_settingsを適用します)
./dc_template_restore.sh dcdev dctemplate
./dc_migrate.sh dcdev # そのインスタンス固有の移行スクリプトで実行されます

実際のライブphpbbから一晩かけて長時間の移行を実行します。

./dc_template_create.sh dctemplate
./dc_template_restore.sh dcstaging dctemplate

./phpbb_pull.sh
./dc_migrate.sh dcstaging
sleep 300
./dc_rake.sh dcstaging # モデレーターの作成、詳細なタグ付け、トピックの移動など、インポーターで処理されない追加の移行後タスク

もし誰かが十分に興味があれば、少しきれいにして共有することができます。

「いいね!」 2

Discourse にはタグがあるので、意味のあるサブカテゴリを廃止してタグを活用するのは賢明かもしれません。

私のサブカテゴリにはそれぞれ複数の固定/貼り付けトピックがありましたが、大きなカテゴリにまとめると、固定トピックが多すぎて邪魔になります。

私の解決策は、次のようなカテゴリから:

Food
- American
- Chinese
- ...

次のようにすることでした:

Food
- Featured

アメリカン、中華などのカテゴリはタグになり、すべての固定トピックは「Featured」に入り、固定解除されます。

# 固定トピックをすべてカテゴリから解除し、サブカテゴリに移動する
def move_pinned_topics_to_subcategory(category, subcategory_name)
  subcategory = Category.where(name: subcategory_name).find_by(parent_category_id: category.id)
  topics = Topic.where(category_id: category.id).where.not(pinned_at: nil)
  topics.each do |topic|
    topic.update(pinned_at: nil, pinned_globally: false, pinned_until: nil,
      category_id: subcategory.id) if not topic.title[/About the .+ category/]
  end
  Category.update_stats
end

food_cat = Category.find_by(name: 'Food')
move_pinned_topics_to_subcategory(food_cat, 'Featured')
「いいね!」 4

私のフォーラムには、以前の(これもphpBBの)死んだインカネーションもあり、wgetでサイトリッピングしたものがあるので、それ用のインポーターに取り組んでいます。HTMLファイルをNokogiriで解析し、中間DBに取り込み、その後インポーターの基底クラスを使ってDiscourseに行を投入します。

これを見ました:

これは珍しい問題だと思いますが、もし他にこの問題に直面している人がいたら、もう少し磨きをかけて共有するかもしれません。お知らせください。

あるいは、誰かがすでにこれを作成していて、私と共有したいのであれば、それはさらに良いです。まだプロジェクトの初期段階です。

「いいね!」 2