S3アセットがフォーラム移動後に破損しました

こんにちは、

放棄された Discourse フォーラムを移行する必要がありました。幸いなことに、複数の管理者がいたため、移行とバックアップのダウンロードが可能でした。アセットには S3 バケットを使用していたため、それが少し問題となりました。ここで機能リクエストをさせていただきます:

バックアップに S3 アセットを含めることを可能にする

(投稿の再構築の前か後かはっきりしませんが)S3 アセットの URL が内部 URL に書き換えられていたことに気づきました。そこで、データベースファイルからすべての original および optimized の S3 URL を抽出し、(ある意味で)手動でダウンロードしました。それらを適切な場所に移動させた後、欠落していた画像がすべて表示されるようになりました。… このための自動機能があれば素晴らしいと思います。

これまでに、以下の 3 つのバグに遭遇しました:

  1. プレビュー画像が壊れているが、拡大画像は正常に表示される
  1. プレビュー画像は正常だが、画像を拡大するためのマウスオーバーが機能しない
  • /t/microlongrange-openhd-edition/379 … 最初の投稿ではリンクを 2 つまでしか作成できません
  1. Gravatar が壊れている(無関係かもしれません):
    -

新しい投稿では問題は見つかりませんでした。

この素晴らしいプロジェクトをありがとうございます。
Limitless Green

それはバグというより設定ミスに思えます。復元前に新しいホストで同じ S3 バケットを設定しましたか?

バックアップを復元しました。これには設定も含まれています。その後(HTTPS 強制も実施)、S3 バケットからの画像が全く表示されなくなりました。

現在、S3 設定を完全に削除しました。

これは設定が完全に上書きされたということでしょうか?

ただし、以前 app.yml 内の ENV 変数を使用して設定されていた S3 設定は除きます。

それを行う非公開の設定が存在します。Cdck は、ホスティングを計画していることを把握している顧客に対してこれを有効にしています。

S3 の設定は、アップロード用のオブジェクトストレージの使用 (S3 およびクローン) に説明されている通り、環境変数で行うのが最適です。

復元後、s3 upload bucket と s3 cdn url に設定を保存しました。
旧サーバーの app.yml にはアクセスできません。

おお、いいね! :grinning: どこ?
backup セクションで見つけた唯一の適切なオプションはこれです:
grafik
(チェックが入っていました)

明確でないかもしれませんが、現時点では S3 は使いたくありません。そして、アセットはそこから取得する必要がありました。このサーバーがいつまで存続するかは、誰も知りません :sweat_smile:

SSH でサーバーにアクセスできない場合、隠し設定を変更することはできません。

わかりました。では、私のような場合、今何をすべきでしょうか?
この画像プレビューが破損する原因は何が考えられますか?

もし遅すぎない場合(つまり、フォーラムで既に発生した活動があり、それを失いたくない場合)かつ S3 認証情報をお持ちであれば、app.yml に S3 認証情報を記述して restore を再実行することをお勧めします。その後、非表示設定を有効にし、バックアップを取得して、S3 のないサーバーで復元できるはずです。

ただし、おそらく状況はそうではないでしょう。また、あなた自身も正確にいつ何をしたかを覚えていないため、どのような問題が生じうるのか明確ではありません。

もしデータが不足しており(かつ S3 認証情報をお持ちであれば)、何らかの S3 ツールを使用してすべてのアップロードデータをダウンロードし、データベースを修正してそれらを指すように調整することを検討するかもしれません。ただし、その方法をここで詳しく説明できるほど私はその分野に精通していません。

残念ながら、S3 の認証情報が手元にありません :frowning:

以下の手順は再現可能です:

  1. Traefik の背後で discourse_docker を使用して新しい Discourse フォーラムをインストール
  2. 古いフォーラム(一部の古いアセットを含む)のバックアップを取得
  3. 取得したバックアップを新しいフォーラムに復元
  4. HTTPS を強制
  5. バックアップから dump.sql 内のアセット URL を抽出
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/original\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e original.txt
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/optimized\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e optimized.txt
  1. アセットをダウンロード: cat optimized.txt | parallel --gnu \"wget -nc -P ./optimized/1X/ {}\"(original についても同様)
  2. S3 設定を削除
  3. rake posts:rebake を実行

データベース上で何を検索すればよいか分かれば、SQL 操作は可能です。