アップロードにAmazon S3を使用するのをやめましょう

いくつかの実験を行った結果、'remap’操作を行う前であっても、投稿の一部に画像が表示されないことがわかりました。

代わりに、画像の小さなアイコンが表示され、マウスをホバーすると画像のパスが表示され、クリックすると画像が表示されます。

さらに、3 ドットメニューから「HTML を再構築」したり、コンテナ内で「rebake」操作を行ったりすると、そのアイコンさえも消えてしまい(代わりに空白や画像のプレースホルダーが表示されます)。

どうかご教示ください。

「いいね!」 1

リマップを行っておらず、S3 バケットも正常に機能している場合、以前と何も変わらないはずです。この手順を始める前、その画像は表示されていましたか?

理論的には、S3 バケットをオフにするか、リマップを誤って設定した場合にのみ、それらの画像ファイルとの接続が失われます。

「いいね!」 2

ありがとうございます。

画像アイコンをクリックすると、パスが /bucket/uploads/optimized/folder/... として表示されていることがわかりました(このパスに該当する画像が存在しないため、画像自体は表示されず、アイコンのみが表示されます)。

しかし、その画像アイコンをクリックすると、画像は「Orig」フォルダ、つまり /bucket/uploads/original/... から表示(提供)されます。

1 つの画像に 2 つの異なるパスが格納されているなんて、どうしてあり得るのでしょうか?!

とにかく、今は「optimized」以下の誤ったパスにマッピングされている画像を含む投稿をどうやって見つけるかが問題です。そうすれば、それらのアドレスを「Original」以下の正しいパスに修正(リマップ)できます。

「いいね!」 1

@nathank さん、@Pravi さん、@itsbhanusharma さん、ありがとうございます。異なる問題や状況が混同されていたため、現在の状況は以下の通りです。

  1. 一部の投稿では、アップロードされた画像が表示されず、マウスを乗せると誤ったバケットの URL/アドレスを示す小さなアイコンが表示されるか、あるいは、その小さなアイコンをクリックしたときのみ正しい画像と正しいバケットのパスが表示されます。さらに他の投稿では、画像が全く表示されず、空白のスペースになるだけというケースもあります。
    誤ったバケット URL を正しいバケット URL にマッピングする操作(remap wrongbucketurl correctbucketurl)を実行したところ、サンプルの 1 つの投稿では、一時的に小さなアイコンが正しい画像に置き換わって(一時的に安心しましたが)、翌日にはその画像が完全に消え、アイコンすら表示されず、代わりに空白のスペースが表示されるようになりました。そのため、ウェブサイトを前日の状態に復元せざるを得ませんでした。

  2. このコマンドを実行した結果は以下の通りでした。

# rake posts:missing_uploads
Looking for missing uploads on: default

19 post uploads are missing.

19 uploads are missing.
6 of 7792 posts are affected.
「いいね!」 1

ローカルへの移行は完了していません。サイトを確認したところ、S3 の URL がまだ残っています。

コマンドは以下のようになります。

./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake
「いいね!」 3

このプロセスのバリエーションを数十回試しましたが、まだ動作しません。

管理部門がパブリックアクセスを持つ S3 バケットを望まないとの決定を下したため、画像は S3 を介して表示されず、ローカルに戻す必要があります。

当初、壊れたリンクを検査し、そこからリマップに使用する必要がある値を特定したつもりでした(そう思っていました)。その結果、いくつかの画像は表示されるようになりましたが、大部分(90% 以上)は表示されません。壊れた S3 リンクの場合、少なくともリンクを検査して何が問題かを特定できるのに対し、私には以下のエラーメッセージしか表示されません。

link

これらの画像が表示されない原因が何かご存知の方はいらっしゃいますか?数日間この問題に直面しています。a) 元に戻す方法がないこと、b) 元に戻す方法がない状況で(私ではない誰かが)移行を行ってしまったことには驚きを禁じ得ません。

明確にしておきますが、@nathank さんが説明した手順に従いました。何度も試しましたが、リマップステップでのパスのわずかなバリエーションを多く試しています。なぜなら、その手順が普遍的なのか、それともディレクトリ構造に依存するのか(私たちのディレクトリには S3 同期ステップで正常にコピーされた多数のサブディレクトリがあります)が明確でないからです。

髪を抜くほど困っていますので、何かお手伝いいただければ幸いです。

やりたいことは、非表示の include_s3_uploads_in_backups を有効にしてバックアップを作成し、それを復元することだと思います(まずは新しいテストサーバーで試すことをお勧めします)。これは、CDCK の顧客がサブスクリプションをキャンセルした際に発生する処理であり、そのようなバックアップは新しいセルフホスト型サイトへ問題なく復元されます。

「いいね!」 6

こんにちは、Jayさん。返信ありがとうございます。無知で申し訳ないのですが、それをオンにするにはどうすればよいでしょうか?

「いいね!」 1

申し訳ありません。以下のようなコマンドを実行してください。

./launcher enter app
rails c
SiteSettings.include_s3_uploads_in_backups=true
exit
exit
「いいね!」 2

それを実行しようとしましたが、以下のエラーが発生しました:

\u003e NoMethodError: undefined method include_s3_uploads_in_backups=' for SiteSettings:Module \u003e from (pry):1:in pry

その後、S3 アップロードをオフにしていたため、再度オンにする必要があることに気づきましたが、同じエラーが発生しました。

ああ、私たちは 2 つのコンテナを使用しており、私は web_only でこれを実行しています。Rails コマンドは data コンテナには存在しないため、このアプローチが正しいと推測します。

「いいね!」 1

コマンドは以下であるべきだったようです:

SiteSetting.include_s3_uploads_in_backups=true

これを実行してから新しいバックアップを作成し、そのバックアップから復元しましたが、変化はありませんでした。前述の壊れたアイコンが表示された画像のほとんどはそのままです。コンテナの両方を再構築してみましたが、これも違いはありませんでした。

バックアップの ZIP ファイルをダウンロードして確認すると、それらのファイルは確かに含まれており、復元後もファイルシステム上では表示されます。しかし、Discourse はそれらを認識して表示することを拒否し続けています。

「いいね!」 1

参考までに、最終的にこれを解決しました。インスタンスのスナップショットから完全にやり直したところ、最終的に機能した手順は以下の通りです。

  • rails コンソールを使用して SiteSetting.include_s3_uploads_in_backups=true を実行
  • 新しいバックアップを作成
  • このバックアップからリストア
  • discourse remap を使用して、各種 S3 ファイル場所への参照をローカル場所へ更新
  • ポストの再焼成(rebake)と Docker コンテナの両方の再構築

この方面への正しい方向を示してくださった @pfaffman さん、ありがとうございます。

編集

ついでにこれを提起しておきます。前の投稿の後、6 つのトピックの画像がまだ壊れていることに気づきました(ただし、大部分は現在正常です)。

これらは私たちの最も古い 6 つの投稿であり、すべての元の画像が他のものとは異なる S3 URL を持っていました。これは明らかに偶然ではありません。そこで、それらのファイルがすべて uploads/default/original/1X ディレクトリにあるか確認しましたが、すべてそこに存在していました。次に、この固有の S3 URL を使用して remap コマンドを実行すると、正しい数のポストが編集されたように見えました。その後、再焼成とコンテナの再構築を行いましたが、これらのトピックはまだ壊れたままです。なぜ少数だけがこのような失敗をするのか、ご存知の方がいらっしゃいますか?

「いいね!」 7

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.