カスタムアバターが3.3.0beta1へのアップデート後に消えました

こんにちは。

最近、テストフォーラムを 3.3.0beta1 にアップデートしました。テストフォーラムは、ライブフォーラムのコンテンツを少し古いコピーにしたものです。アップデートや新機能のテストに使用しています。アップロードには、ライブフォーラムと同じ Amazon S3 接続を使用しています。

ホスト OS を最新の Ubuntu 24.04 LTS にアップデートし、フォーラムを 3.3.0beta1 にアップデートした後、すべてのアバターが消え、代わりに白/灰色の頭が表示されます。

ログを確認したところ、次のようなメッセージが見つかりました。

```ストア内のファイルが見つかりませんでした。URL: //ourbucket.s3.dualstack.eu-central-1.amazonaws.com/original/3X/6/9/69ca9110f27d91561axyz52a9cd9485a970fe9.jpeg```

実際には、その URL に画像が存在し、問題なく動作しているにもかかわらずです。DNS の問題や、ローカルアバタープロキシがファイルを取得できないような他の問題がないか確認するために、サーバーからファイルを wget で取得しようとしましたが、それも問題ありませんでした。

何が起こっているのか、何か考えはありますか?

テストフォーラムだけでなく、ライブフォーラムでもアバターが少しずつ消えており、ログにも同じエラーが表示されているようです。

テストフォーラムがS3バケット内の予期しないものをクリーンアップしているのかどうか疑問に思いますが、バケット内にそれがあると言っているので、それは違います。おそらく、データベースをテストに復元して、アップロードモデルに何があるかを確認してください。

問題は、ログのエラーメッセージが特定の画像を読み込めないことを示しているのに、その画像は実際には利用可能であるということです。そのため、フォーラム/アバタープロキシが画像をプルするのを妨げている何かがあるのだと思います。

「いいね!」 1

テストサーバー(3.3.0beta1実行中)に新しいアバター画像をアップロードしました。プレビューには表示されましたが、ロードに失敗しました。

/var/www/discourse/app/models/optimized_image.rb:81:in `block in create_for' 
/var/www/discourse/app/models/optimized_image.rb:19:in `block (2 levels) in lock' 
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize' 
/var/www/discourse/app/models/optimized_image.rb:19:in `block in lock' 
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize' 
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize' 
/var/www/discourse/app/models/optimized_image.rb:18:in `lock' 
/var/www/discourse/app/models/optimized_image.rb:73:in `create_for' 
/var/www/discourse/app/models/upload.rb:130:in `get_optimized_image' 
/var/www/discourse/app/controllers/user_avatars_controller.rb:218:in `get_optimized_image' 
/var/www/discourse/app/controllers/user_avatars_controller.rb:136:in `show_in_site' 
/var/www/discourse/app/controllers/user_avatars_controller.rb:89:in `block (2 levels) in show' 
/var/www/discourse/lib/hijack.rb:64:in `instance_eval' 
/var/www/discourse/lib/hijack.rb:64:in `block in hijack' 
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution' 
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback' 
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks' 
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with' 
concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve' 
/var/www/discourse/lib/scheduler/defer.rb:115:in `block in do_work' 
rails_multisite-5.0.1/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-5.0.1/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:109:in `do_work' 
/var/www/discourse/lib/scheduler/defer.rb:97:in `block (2 levels) in start_thread' 

これはログからのものです。

それに関するログメッセージは次のとおりです。

URL: //ourbucket.s3.dualstack.eu-central-1.amazonaws.com/original/3X/0/2/02832e36e27bbad791fda46e2290df31e5ee2dda.jpeg にあるストア内のファイルが見つかりませんでした

(URLは変更しましたが、実際のURLは機能します)

「‘block in hijack’」が気になります。

本番システムではCloudflareの背後で実行しています。テストシステムは「DNSのみ」なので、明らかにCloudflareを経由してフィルタリングされていません。最近、メインサイトでボットに関する問題が発生し、Cloudflareフィルターをかなり調整しました。

しかし、なぜamazonaws.comのURLからの取得が問題になるのでしょうか?また、テストサイトはまったくCloudflareを経由していません。

正直なところ、少し混乱しています。

それが本当に困っています。ライブフォーラムとテストフォーラムの両方に影響しているようです。ライブはまだ古いバージョンで、問題はアップデートで始まったわけではなく、何も注目すべき変更がない数日前に現れました。

Discourse は新しいカスタムアバターを S3 に正しくアップロードし、それらに ACL を正しく設定しているように見え、ファイルはアバタープロキシにプルするために Discourse が使用しようとしている URL からも公開アクセス可能ですが、それでもプルに失敗します(上記のスタックトレースを参照)。

アバタープロキシの仕組みについて詳しい知識がある方で、スタックトレースから何かを読み取れる方はいらっしゃいますか?

サーバーから画像の URL を wget で取得しましたが、すべて正常に動作しました。アクセスをブロックするようなものはありませんでした。

ブラウザからも取得できますか?

ああ、はい、それが不明瞭だったならすみません。ブラウザからアクセスできます(だから公開されていると仮定しました)し、サーバーからもアクセスできます(サーバーがそれらを取得するのに何らかの問題があることを除外するためです)。本当に、何らかの理由でDiscourseがそれらを取得できていないだけです(上記のスタックトレースを参照してください)。

「いいね!」 1

問題は解決しましたか? バージョン3.2.1で全く同じ問題が発生しています。バケットはすべてのパブリックアクセスをブロックしていますが、署名付きURL経由ではまだ機能していました。現在、全く同じエラーが発生しています。

Could not find file in the store located at url: