Rake 投稿: rebake_incremental(機能リクエスト)

親愛なる Discourse 開発者各位、

件名:rake posts:rebake(将来の機能)

rake posts:rebake                                                      # 各投稿を最新の Markdown で再構築
rake posts:rebake_match[pattern,type,delay]                            # 文字列/正規表現に一致するすべての投稿を再構築し、必要に応じてループを遅延させる

A. トピック ID(または投稿 ID)が特定の整数より大きい場合にのみ再構築できるようにする機能を追加していただければ幸いです。

rake posts:rebake_incremental['topic_id', 34567]      # topic_id が 34567 以上の場合に再構築
rake posts:rebake_incremental['post_id', 364123]      # post_id が 364123 以上の場合に再構築

理由:

(1) 再構築を行う際、特に移行タスクの作業中、開発者はすでにトピックや投稿を移行している場合があります。しかし、その後、新しい投稿を含めて移行を更新した場合(例えば、アクティブなフォーラムで移行が更新された場合)、再構築の開始点を指定する方法はありません(私の知る限りでは)。パターンマッチングはこれを目的として設計されていません(私の理解が誤っている場合は別ですが)。

(2) 古いフォーラムから Discourse への移行タスクにおいて、テキストの微調整を行う際、例えば、コーディングフォーラムで Markdown と互換性があるように古いフォーラムの特殊文字を調整したり、レガシーフォーラムの再帰的 BB コードを調整したりする際に、最後の 1000 件の投稿(データベース全体ではなく)を再構築することが有効です。

B. A よりもさらに柔軟に(比較演算子を指定)

rake posts:rebake_incremental['topic_id', '>=', 34567]      # topic_id が 34567 以上の場合に再構築
rake posts:rebake_incremental['post_id', '<', 364123]      # post_id が 364123 未満の場合に再構築

汎用的な形式:

rake posts:rebake_incremental[target, operator, id]

ここで:

  • target は topic_id または post_id
  • operator は算術比較演算子
  • id は整数で、topic_id または post_id

注記:移行タスクは、特に元のフォーラムから Discourse への投稿のテキストとエンコーディングにおいて、正しい結果を得るために多くの反復を必要とすることがよくあります。非 Markdown ベースのフォーラムで使用できる多くの文字は、Markdown 処理フォーラムに移行すると問題を引き起こす可能性があります。上記のように再構築プロセスをより制御可能にすることは、その解決に役立つでしょう。

「いいね!」 3

再焼き用の別の rake タスクもあります:

rake posts:rebake_uncooked_posts

上記の rake タスクを実行する前に、Rails コンソールで以下のコマンドを実行することで、リクエストされたすべての処理だけでなく、それ以上のことも行うことができます。

DB.exec(<<~SQL)
  UPDATE posts
  SET baked_version = NULL
  WHERE topic_id >= 34567
SQL

条件はご自身の特別なユースケースに合わせて調整してください。私にとっては、rake タスクよりもはるかに柔軟性が高い方法です。

「いいね!」 13

完璧です!!

@gerhard さん、ありがとうございます!!

1000% 完全に同意です。

この rake タスクとメソッドが大好きです。本当に素晴らしいです!

改めてありがとうございます!!


メモ:@gerhard さんが提案したこの方法の素晴らしい点の一つは、最後の 1000 件の投稿(例えば)を一度に処理(バーク)でき、結果に満足すれば、残りの 999,000 件の投稿も処理に進めることです。これは本当に素晴らしい機能の宝石です。

改めてありがとうございます


「いいね!」 5