壊れた画像とそのS3 URL

最近の 2.5.0.beta7 へのアップデート後、フォーラムのすべての画像が壊れて表示されるようになりました。
image

アバターもデフォルトのものに置き換わっています。ダッシュボードには以下のような表示がされています:

アセットに関するスタッフ投稿:

そのような画像の一例:/original/2X/4/4064b1cc32199de63ad2fa2b5bd2a0c5b6872c6d.png

しかし、私の S3 にはそのような画像がありません(なぜこのようなことが起きたのでしょうか?):

ファビコンやその他のロゴも欠落しています:/original/1X/b32666bfe0e0eac40aacb178c7430c9f7873b397.png

しかし、私の S3 には以下のファイルしか存在しません:

URL が間違っており、original フォルダ内に 1X フォルダが存在しないことに注目してください。

この投稿のチュートリアルに従ってみました:

しかし、何も解決しませんでした。

ご指摘させてくださいが、この画像はあなたのバケットには存在せず、4061....41.png でしょうか?:thinking:
ローカルには存在しますか?

申し訳ありません、表現が不適切でした。S3 バケットにはそれが入っていない、つまりどのバケットにも入っていないことに気づいたという意味でした。

ローカルでそれを確認するにはどうすればよいでしょうか?

なるほど、確かにその方が理にかなっていますね :sweat_smile:
お好みの SSH クライアントを使ってローカルで確認できます。環境によりますが、ファイルはおそらく /var/discourse/shared/standalone/uploads/default/original/2X/ のような場所にあります。
したがって、ls -R /var/discourse/shared/standalone/uploads/ | grep 4064b を実行して、4064b…d.png というファイルを探すことができます。

「いいね!」 2

@masterakay さんと同じ Discourse インスタンスについて話しています。

2 年以上前に S3 に移行しており、ローカルアップロードディレクトリ内のファイルで 2018 年以降に作成されたものは一つもありません。

私の理解では、画像は「original」フォルダにアップロードされ、その後処理(切り取り、サイズ縮小など)されて「optimized」フォルダに格納されます。Discourse が画像アップロード時に使用する URL は、依然として「/original/1X/」フォルダからのものです。何らかの理由で、アップグレードにより「1X」フォルダが消失してしまいました。

「default」というフォルダがあり、そこには画像などの多数のアップロードファイルや切り取り版が含まれています。ここには約 1 万個のファイルがあり、容量は約 2.5 GB です。

問題は、投稿内の画像 URL が常に「original」のものを指していることです。
気づいた点として、欠落しているファイルは「default」フォルダ内のファイルの一部であることがわかりました。
新しいアップロードは問題なく動作し、/original/2X/」に保存されます。

どなたか、/original/1X/」フォルダがどこへ行ったのか、また復元可能かどうかについてご存知の方はいらっしゃいますか?

「いいね!」 2

@sam @codinghorror 申し訳ありませんが、急ぎの件で皆さんをお引き込みしてしまい、大変恐縮です。私たちは学生で、大学から画像の修正を迫られ、どうすればよいかわからない状況です。

私も同じ現象を確認しています。これは最近のアップデート後に発生し始めました。

https://discourse.sesp.northwestern.edu

「いいね!」 1

S3 はどのように設定していますか?app.yml に値を設定しましたか、それとも管理画面だけで設定しましたか?DISCOURSE_S3_BUCKET または DISCOURSE_S3_BACKUP_BUCKET について、予期しない値が設定されているようです。

「いいね!」 4

はい、説明した通り、最近のアップデートまではすべて問題ありませんでした。すべての手順に従いました。
特に、以下のようなことを行いました:

これらの値についてですが、app.yml 内で設定された変数が見つかりません。以前は必要ありませんでした。何か変更があったのでしょうか?

その通りです。コードに何らかの問題がある可能性はありますが、何が、なぜ問題なのかはわかりません。そのため、より詳細な情報が必要です。

S3 の設定には 2 つの方法があります。app.yml で環境を構成するか、管理 UI で値を入力するかです。それぞれで変数名がわずかに異なります。

リンクされているトピックでは、管理 UI での設定方法が説明されています。もしその方法でサイトを設定したのであれば、s3_upload_buckets3_backup_bucket にどのような値を設定しているか教えてください。

「いいね!」 2

@schleifer 僕も同じです。その設定は変更していません。AWS 認証情報も動作することを確認しました。

ああ、それで納得です。

この問題は、それらの設定値を同じにしてはいけないため発生しました。セットアップトピックで「アップロードとバックアップには本当に別々のバケットが必要ですか?」という行を検索してください。
バックアップバケットの内容に対してメンテナンスジョブが実行され、値が重複していたため、アップロードにも影響が出ました。

@sam コードで強制すべきですね。ドキュメントだけでは不十分です。

サイトを修復するには、以下の2つの手順が必要です。

まず、バックアッププレフィックスを変更します。セットアップトピックに記載されている通り、末尾に /backups を追加するだけで十分です。

次に、S3 バケット内のすべてのデータを正しい場所に移動します。トップレベルの「default」フォルダにあるものは、すべてトップレベルに戻してください。
例えば、「default/originals」フォルダがあるはずなので、それを上位階層に移動する必要があります。

バケットを閲覧するには、AWS 管理コンソールまたは他のツールを使用する必要があります。

「いいね!」 5

ありがとうございます!手順を試してみますし、何かあったらまたここに戻りますね。なぜ突然こうなったのか、何か理由がわかりますか?:sweat_smile:

@schleifer さん、ご指摘の通りですね。バケット名に「backups」プレフィックスを追加しました。

既存のアップロードファイルについては、すべて /default/ フォルダ内にあり(サブフォルダはありません)、投稿内の画像 URL(および他の場所)では /original/* または /optimized/* が使用されています。

もし default フォルダ内のファイルをすべて 1 つレベル上げ(ルートディレクトリへ移動)すれば、画像は /* 配下になります。
なお、defaults 内にはフォルダはなく、アップロードファイルのみが含まれています。標準的な 40 文字のハッシュ名を持つファイルや、「_2_10x10」のようなサフィックスが付いたファイル(最適化由来と推測されます)も含まれているようです。

この状況をどのように修正すべきか、ご提案をお願いします。すべての投稿のリンクを新しいものに変更するには時間がかかります。ファイル名に基づいてファイルを正しいフォルダにグループ化することは可能でしょうか?

「いいね!」 1

@schleifer これについて何か更新情報はありますか?

[quote=“rithvikvibhu, post:17, topic:155889”]
既存のアップロードについては、すべてが /default/ にあり(サブフォルダ内ではありません)。[/quote]

それは…意外ですね。では、いくつかのものを手動で修正する必要があります。

最も重要な質問は「新しいアップロードは正しい場所に送られていますか?」ということです。

それが事実だと仮定すると、古いアップロードを既知の場所に移動し、データベースエントリを調整できます。/default/ には何個のファイルがありますか?

「いいね!」 3

新しいアップロードは、幸いなことにサブフォルダ内で期待通りに動作しています。また、投稿内のリンクも正しい場所を指しています。

/default/ には 1 万を超えるファイルがあります。投稿を一つ一つ手動で編集するのは非常に大変そうです。これをスクリプト化する方法はありませんか?すべての投稿に対して正規表現置換を使うような方法はいかがでしょうか?

はい、それが計画です。次にやるべきことは、すべてのAWOLファイルを既知の場所に配置することです。バケット内の/original/の下にどのようなサブディレクトリがありますか?/1X/があるはずですが、他にもあるかもしれません。

「いいね!」 3

これが完全なフォルダ構成です。新しいアップロード(正常に動作)は /original/2X/*/.jpg に保存されます。

/
|---backups
    |---default
        |---(多数のバックアップ .tar.gz ファイル)
|---default
    |---(10719 件のアップロード済みファイル:pdf、画像など)
|---inventory
    |---1/pesuioforum/{optimized,original}/[DATE]/manifest.{checksum,json}
|---optimized
    |---1X
        |---(2 ファイル)
    |---2X
        |---{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
            |---(上記のフォルダ名の文字で始まるアップロード済みファイル) (合計 1055 ファイル)
|---original
    |---2X
        |---(optimized/2X と同様、520 ファイル)
|---tombstone
    |---optimized
        |---1X
            |---(2 ファイル)
    |---original
        |---2X
            |---(optimized/2X と同様、1 ファイル)

次にやるべきことは、すべての AWOL ファイルを既知の場所に配置することです。

/default/ にはすでにすべての画像が含まれているようです。

「いいね!」 1