リストア後の壊れたリンクとアセットの修正またはクリーンアップ

サーバーのクラッシュが発生し、新しいサーバーを作成してバックアップから復元する必要がありました。それは大変な作業でした。発生したことと復元方法の詳細はこちら

S3アップロードを無効にした後、復元したところ、投稿内の添付ファイルへのリンクがすべて壊れていました(404エラー)。フォーラムで検索しましたが、解決策が見つからず、誰かが正しい方向を示してくれることを願っています。

2つの選択肢があります。

  1. 投稿に埋め込まれた添付ファイルへのリンク(壊れているリンクはすべて投稿内の添付ファイルへのものです。埋め込み画像は正常に表示され、その他の内部リンクも正常に機能します)であるこれらの壊れたshort-urlリンクを修正できますか?

たとえば、フォーラムの投稿への添付ファイルのURLは https://XYZ.com/uploads/short-url/phu1HOLvkE8LWpkKYfnMPSWsvHh.zip のように表示されます。これは、投稿内の添付ファイルリンクをクリックしたときにログに表示されるもので、404エラーになります。

メッセージ(5件報告あり)

乗っ取られたレスポンスを正しく処理できませんでした: Errno::ENOENT : No such file or directory @ rb_sysopen - /XXXXX.s3.dualstack.us-east-1.amazonaws.com/optimized/1X/46728e07f9819907d1b18387bf02ea7fc25c7981_2_32x32.ico

バックトレース

/var/www/discourse/app/controllers/static_controller.rb:160:in read' /var/www/discourse/app/controllers/static_controller.rb:160:in block (2 levels) in favicon’
/var/www/discourse/lib/distributed_memoizer.rb:16:in block in memoize' /var/www/discourse/lib/distributed_mutex.rb:33:in block in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:29:in synchronize' /var/www/discourse/lib/distributed_mutex.rb:29:in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:14:in synchronize' /var/www/discourse/lib/distributed_memoizer.rb:12:in memoize’
/var/www/discourse/app/controllers/static_controller.rb:138:in block in favicon' /var/www/discourse/lib/hijack.rb:56:in instance_eval’

サーバーをバックアップから復元中にS3アップロードオプションを無効にした後、これらのshort-urlリンクを修正する方法があることを本当に願っています。投稿の再ベイクでは修正されませんでした。

  1. 万が一、これが行き詰まりで大量に修正できない場合、S3クラウドに数千もの孤立した添付ファイルがある場合、それらをクリーンアップしてスペースを解放する方法はありますか?DiscourseがS3アップロードバケットをスキャンして、すべての孤立したアセットを削除する方法はありますか?

フォーラムの範囲を超えるため、それらのリンクを修正する方法を特定するのは難しいかもしれませんが、可能だったかもしれません。

Upload.sha1_from_short_url('phu1HOLvkE8LWpkKYfnMPSWsvHh.zip')
=> "b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7"

アップロードまたはS3バケットのどこかにb13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7.zipというファイルがあるかどうかを確認してください。もしあれば、修正は可能ですが、簡単ではありません。

実際のフォーラム名やバケット名が含まれていないため、ここでは判断できません。

「いいね!」 1

はい、以下で確認しました。

original/2X/b/b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7.zip

リンク/詳細をPMでお送りします。

非常に面白いのは、添付ファイル(ファイルのようなもの)だけが壊れていることです。埋め込まれた画像はすべて問題なく表示されます。

では、すべてそこにあります。投稿を何らかの方法で書き直すだけです。なぜ機能しないのかわかりませんが、ファイルはそこにあります。

コンソールまたはUIから一括で実行する方法、またはこれらのファイルをS3からローカルに「ダウンロード」する方法はありますか?

そうだと思いますが、ディスコースとレールの両方に詳しい人が書く必要があると思います。あなたの問題に対する既存の解決策は知りません。S3バケット間の移動に関するトピックがいくつかあり、手がかりになるかもしれませんが、あなたの特定の問題が以前に解決されたとは思えません。

復元後、S3アップロードオプションを再度有効にする必要があります。そうしませんでしたか?

「いいね!」 2

そして、それはアプリの app.yml で設定されたため、実行が困難です。これが原因である可能性があります。

それが問題の解決につながるでしょうか?試しても安全かどうか、ただ気になっています。

ええ、それが最初にあなたに勧めたことですよね…
S3へのアップロードを再度有効にしないと、short-url関数はそれらのアップロードをローカルで探しますが、それらはS3にあります。

「いいね!」 2

試してみますが、一方で有効にしたところ、復元が壊れてしまいました(他のトピックを参照)。Jaysの助けを借りて、復元できるようにアップロードを無効にする方法を見つけなければなりませんでした。オプションを有効にしたままサーバーを正常に復元できましたか?

以下を行う必要があります。

  • 設定を無効にする
  • 復元する
  • 設定を有効にする

先週のPMでのやり取りで説明したとおりです。

「いいね!」 2