これと似た問題に遭遇しました bug :
https://meta.discourse.org/t/missing-user-profile-pictures/93844
欠落しているアバターを復元する方法はありますか?
追伸:このガイド を試して rake avatars:refresh を実行しましたが、何も起こりませんでした。
これと似た問題に遭遇しました bug :
https://meta.discourse.org/t/missing-user-profile-pictures/93844
欠落しているアバターを復元する方法はありますか?
追伸:このガイド を試して rake avatars:refresh を実行しましたが、何も起こりませんでした。
この問題はウイルスのように広がり、より多くのアバターに影響を及ぼしています!奇妙な観察結果がありました:
Firefox では一部のアバターが表示される一方、Chrome では欠落しています。ただし、Firefox にも欠落しているアバターが存在します!
このバグは本当に 修正 されたのでしょうか?
私も同じ問題に遭遇しており、現在調査中です。私が調査しているケースでは、外部ストレージと関連しています。
@Pad_Pors 今もこの問題が発生していますか?また、S3 にアップロードを保存していますか、または保存していましたか?
専門家が見てくれているとのこと、嬉しいです ![]()
はい、この問題はまだ発生しています。以前はアップロードを S3 に保存していましたが、今はしていません。
私たちも同様です、@angus さん。S3 を保有しています。ログやその他必要なものがあればお知らせください。よろしくお願いいたします。
私が調査しているケースでは、コマンドラインでのアップグレードと Postgres のバージョン 10 から 12 への手動アップグレードの後、欠落したアバター画像が S3 のトーンストーンフォルダに移動していました。なぜそうなったのか、まだ正確には分かりません。
@Jeremie_Leroy @Pad_Pors もし皆さんのケースでも同様の現象が起きているか確認したい場合は、私の S3 トーンストーンフォルダで欠落したアバターを確認した手順は以下の通りです。
マイグレーション後に破損していることが分かっていたアバターアップロードの SHA1(アップロード URL 内の 16 文字の文字列)を取得します。具体的には、破損したアバターのアップロード URL からアップロード ID(ファイル名の最初の部分、例:6254_2.png の場合、ID は 6254)を取り出し、その ID を使って最近のデータベースダンプからそのアップロードの SHA1 を検索します。コマンドラインに抵抗がある場合は、Postico 2 のような Postgres GUI を使ってダンプ内のデータを視覚化することもできます。
AWS CLI を使用して、対象の S3 バケットのトーンストーンフォルダ内でその SHA1 を検索します。
aws s3api list-objects --bucket <bucket_name> --query "Contents[?contains(Key, <sha1>)]" --prefix "tombstone"
(<bucket_name> と <sha1> を実際の値に置き換える必要があります)
正常に動作すれば、以下のような結果のリストが表示されます。
{
"Key": "tombstone/original/2X/d/d7b553ff276fca054c7090e859ef5339fd1f936e.jpg",
"LastModified": "2020-05-16T11:45:03+00:00",
"ETag": ## 文字と数字の文字列,
"Size": 64580,
"StorageClass": "STANDARD",
"Owner": {
"ID": ## 文字と数字の文字列
}
}
なお、5/16 は私がアップグレードを実行した日付です。誤ってトーンストーン化されたアバターはすべて、その時期のタイムスタンプを持っています。キャッシュの影響により、本番環境での問題の発生に時間がかかり、断続的に現れたのではないかと推測しています。
私の理解では、UploadRecovery(および関連する rake タスク)は投稿のアップロードに特化したものであり、トーンストーン化されたアバターは処理しません。
現在、recover_from_s3 を使用してアバターアップロードを復元する新しいメソッドを UploadRecovery に追加(パッチ適用)する方法を検討しています。
S3 で誤ってトーンストーン化されたアバターを復元するより簡単な方法をご存知の方がいれば、ぜひご教示ください。
@tgxworld 何かアイデアはありますか?
これは私にとって難しい問題です。私たちのような状況にある他の人はいますか?アップデートに取り組む価値はありますか?@sam @codinghorror
@angus さん、確認パスの共有ありがとうございます。ただ、現在は AWS も S3 も使用していません。もし私の記憶が正しければ、AWS からの移行後に問題が発生し始めたようです。
問題が修正されることを願っていますが、現時点では、数人のユーザーにアバターを再アップロードしてもらう方が私にとっては簡単です。この問題が新しいユーザーに広がらないことを祈ります!
管理しているサイトでは、投稿内で誤って墓碑化された画像を復元するのと同じロジックを適応させたバージョンを使用することで、この問題を正常に解決しました:discourse/lib/upload_recovery.rb at main · discourse/discourse · GitHub
@Jeremie_Leroy 上記の手順を記載した理由の一つは、アバターが欠落する原因が複数考えられるためです。この方法があなたに有効かどうかを確認するには、まず誤って墓碑化されたアバターが存在するか、つまりあなたのケースにおける問題の原因が何かを確認する必要があります。
また、Discourse の技術的な側面に詳しくない場合、その分析を行うのは非常に難しいことも理解しています。私が使用した解決策をプラグインとしてまとめましたので、ご自身のサイトで試してみてください。手順は以下に記載します。
@Pad_Pors もし単にユーザーにアバターを再アップロードしてもらうことで構わないのであれば、この修正を試みるのではなく、そう依頼するだけで良いでしょう。
以下の条件において、欠落したアバターの修復を行うものです:
フォアムの活動が低い時間帯に行い、事前に完全バックアップを取得してください。
このプラグインは、UploadRecovery に recover_avatars を追加し、投稿内の欠落したアップロードを復元するために使用される主要な recover メソッドと同じ復元方法の適応版を使用します。
これにより、「復元された」アバターのコピーが冗長性のために墓碑フォルダに保持されます。これらのコピーは、purge_deleted_uploads_grace_period_days サイト設定で設定された期間に基づいて実行される purge_deleted_uploads バックグラウンドジョブによって削除されます。
このメソッドを使用するには、まずサーバーに SSH で接続し、Docker インスタンスに入り、Rails コンソールを起動する必要があります。
./launcher enter app
rails c
このメソッドが墓碑からどのアップロードを復元しようとするかを確認するには、まずテスト実行を行ってください。
UploadRecovery.new(dry_run: true, stop_on_error: false).recover_avatars
これにより、ユーザー名と S3 ファイルリンクのリストが表示されます。これらは、実際の実行時にメソッドが墓碑から移動させようとするアバターファイルです。
例出力
user1 tombstone/original/2X/b/bc84397936074854226f1c6e9016099b7fc0aca7.jpeg
user2 tombstone/original/2X/b/b8588e7e45804406f2cbe86f2362c2ccf7f13155.jpg
user3 tombstone/original/2X/8/81a4e3b70cdc35e8f61bca87d276d0253152804a.jpeg
これを、あなたのサイトで見つからないアバターを持つユーザーと比較してください。
dry_run を false に変更して実際の実行を行ってください。
UploadRecovery.new(dry_run: false, stop_on_error: false).recover_avatars
ジョブが完了したら、新しいシークレットウィンドウでライブサイトを確認してください(キャッシュの問題を避けるため)。完了したら、サーバーへのアクティブな SSH 接続を閉じることを忘れないでください。開いた Rails コンソールで誤った入力をしてしまうことを防ぎたいからです。