パターンに一致するすべての投稿を再 Bake する

:bookmark: このガイドでは、Rails コンソールを使用して、特定の文字列または正規表現に一致するすべての Discourse の投稿を再構築(rebake)する方法について説明します。

:person_raising_hand: 必要なユーザーレベル:管理者

:warning: コンソールへのアクセスが必要です

文字列または正規表現に一致するすべての投稿を再構築したいですか?始めましょう!

サイトへのアクセス

まず、Discourse Droplet に SSH で接続し、Discourse インスタンスの Docker コンテナに入ります。

cd /var/discourse
./launcher enter app

特定の文字列を含むすべての投稿を再構築

以下のコマンドを使用し、pattern を一致させたい文字列に置き換えます。この検索は大文字小文字を区別しません。

rake posts:rebake_match["pattern"]

例えば、生のコンテンツに :slight_smile: を含むすべての投稿を再構築する場合:

rake posts:rebake_match[":slight_smile:"]

正規表現に一致するすべての投稿を再構築

:information_source: PostgreSQL は POSIX 正規表現 を使用して正規表現マッチングを実行します。マッチングは大文字小文字を区別しません。改行に敏感なフラグ ((?n)) が自動的に適用されるため、. は改行文字にマッチせず、^/$ は行の境界でマッチします。

正規表現を使用する場合は、以下のコマンドを使います。

rake posts:rebake_match["pattern",regex]

例:

  • :slight_smile: または Discourse を含む投稿を再構築:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Today で始まる投稿を再構築:

    rake posts:rebake_match["^Today",regex]
    
  • Today または Yesterday で始まる投稿を再構築:

    rake posts:rebake_match["^(Today|Yesterday)",regex]
    

再構築間のオプションの遅延

各再構築実行間に 5 秒の遅延を追加するには、コマンドを以下のように変更します。5 を必要な秒数に調整してください。

rake posts:rebake_match["pattern",string,5]

上級者向け:Rails コンソールの使用

rake タスクでは不十分なタスクには、Rails コンソールを使用します。

Rails コンソールへのアクセス

Docker コンテナ内で Rails コンソールを起動します。

rails c

rebake_uncooked rake タスクの使用

対象の投稿を「uncooked」に設定して再構築します。セットアップ実行後に Rails コンソールを終了し、再構築コマンドを実行します。

カテゴリ全体を再構築する場合:

rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts

Rails コンソールでのループ実行

きめ細かい操作を行うには、投稿を配列として選択し、各投稿を直接再構築します。

特定のユーザーからの投稿

user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
  p.rebake!
end

特定の文字列を含む投稿

posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
  p.rebake!
end
「いいね!」 40

指定した日付より前に作成されたすべての投稿/スレッドを簡単にアンクックする方法はありますか?