バックアップの復元に問題が発生--SiteSetting::Upload.s3_base_urlが失敗--データベースでenable_s3_uploadsが設定されているため

マルチサイトインスタンスのデフォルトサイトからバックアップを取得しました。アップロードはS3に保存されています。include_s3_uploads_in_backups を true に設定してバックアップを正常に作成しました。

これをコマンドラインから、別のマルチサイトインスタンス(S3あり)または新規の標準インストールで復元しようとすると、Something went wrong while remapping uploads というエラーが発生します。

lib/backup_restore/uploads_restorer.rb にいくつかの puts を追加してデバッグしたところ、この行がエラーの原因であることがわかりました。

  puts "base url #{SiteSetting::Upload.s3_base_url}"

その次の行、つまり私のデバッグ前は失敗していたと思われる行は次のとおりです。

       current_s3_base_url = SiteSetting::Upload.enable_s3_uploads ? SiteSetting::Upload.s3_base_url : nil

discourse.conf のさまざまなS3変数をコメントアウトして、データベースに問題を引き起こすような不正な値がないか確認しましたが、すべて空でした。

そして、クリーンインストールでは、バックアップが失敗し、サイトは次のように表示されます。

{
errors: [
"`s3_upload_bucket` site setting has to be set."
]
}

したがって、見落とした他のS3設定がデータベースに設定されている可能性があります。はい、enable_s3_uploads はデータベースに設定されています。use_s3enable_s3_uploads の関係について混乱しています。

「いいね!」 1

S3へのアップロードを有効にする設定をデータベースで行ったことが原因で、復元が機能しないことが確認されました。この設定により、復元時にS3へのアップロードが試みられますが、情報が不足しているため失敗します。(ため息。しかし、マルチサイト/S3インスタンスの復元は、「一部のファイルがS3に移行されていない」という理由で失敗します。)

S3アップロードの設定はすべてUXから非表示にした方が良いのかと思います。UXで設定しても良い結果が得られるとは思えませんが、データベースでS3アップロードを設定するのは便利かもしれません。。。たぶん。

標準インストールに復元されたものは、以下の処理を行っているため、アップロードが表示されずに失敗しています。

      Started GET "/uploads/short-url/puhaSNHeEy1S2knGFQIAZ8lprRy.pdf" for 68.11.35.109 at 2022-01-25 19:48:06 +0000
Processing by UploadsController#show_short as PDF
  Parameters: {"base62"=>"puhaSNHeEy1S2knGFQIAZ8lprRy", "extension"=>"pdf"}
Sent file /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830b.pdf (4.4ms)
Completed 500 Internal Server Error in 130ms (ActiveRecord: 0.0ms | Allocations: 10019)
ActionController::MissingFile (Cannot read file /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830.pdf)

探しているパスは /var/www/discourse/public/ uploads /default/original/1X/ ではなく、/var/www/discourse/public/default/original/1X/ です。

… . .

これは、S3バケットの参照を修正しようとしてリマップを行ったために、ローカルURLのパスが壊れたためです。

これは誰にとっても有用すぎる詳細すぎる情報かもしれませんが、S3アップロード変数をUXから非表示にすることは良い考えだと思います。

「いいね!」 3