S3へのアップロード移行ができません

こんにちは、Backblaze でアップロードホスティング (S3 設定を使用) を設定しました。
新しいアップロードは機能していますが (x-amz-checksum-crc32 ヘッダーの修正後)、既存のアップロードを uploads:migrate_to_s3 で移行しようとするとすぐに失敗します。

これは最新の Discourse バージョン (3.5.0.beta5-dev) で発生しています。
以下は完全な出力です。

root@goactuary-app:/var/www/discourse# rake uploads:migrate_to_s3 --trace
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
アップロードを S3 に移行することは、現在元に戻せません。
[CTRL+c] でキャンセル、[ENTER] で続行

'default' のアップロードを S3 に移行しています...
一部のアップロードは新しいスキーマに移行されませんでした。移行を実行しています。時間がかかる場合があります...
rake aborted!
FileStore::ToS3MigrationError: 一部のアップロードは新しいスキーマに移行できませんでした。手動で修正する必要があります。(FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

アップロード用のS3互換オブジェクトストレージプロバイダーを設定するで説明されているように、app.ymlに入れる必要があります。

Backblazeと連携するバージョンにawsライブラリを戻すコードをapp.ymlに追加したということですか?

「いいね!」 2

はい、app.yml に記述し、アプリを再構築しました。
新しくアップロードされたファイルがそこへ行っていることを確認しました。

正確には違います。以下の環境変数を使用しています。

  AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED
  AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED

これらにより、設定変更後に新しいファイルをアップロードできなかった問題が解決しました。

それらは自分で見つける必要があるでしょう。

Railsでは以下を実行できます。

 Upload.pluck(:url)

そして、どのアップロードが問題であるかを探します。

私の経験では、それだけでは十分ではありませんでしたが、あなたはそれが機能していると言います。

「いいね!」 2

コンテナ内のaws gemsを手動でダウングレードしたところ、uploads:migrate_to_s3 ジョブが実際に画像をアップロードするようになりました。指摘されたように、環境変​​数だけでは不十分だったようです。

しかし、プロセスは後で別の箇所で失敗しました。

FileStore::ToS3MigrationError: 2 posts が新しいS3アップロードURLにリマップされていません。S3移行はDB 'default' で失敗しました。(FileStore::ToS3MigrationError)

それは別のトラブルシューティングの冒険になるでしょう。

「いいね!」 1

ローカル投稿を参照するボックスが1つあるためかもしれません。それについてのトピックを作成しましたが、詳細は正確には覚えていません。

もし2つだけなら無視してもよいかもしれませんが、Railsでは新しいバケットが含まれていないすべてのアップロードを見つけることができます。空になるのではないでしょうか?

問題は、調理済みの投稿に予期しないパスを持つ2つの投稿があることだと思います。

見つけました!
Discourse Oneboxへのリンクが含まれている場合、バックアップを復元できません

編集:ローカルワンボックスを持つ投稿が2つあるようです。それらの投稿を見つけて再調理する必要があると思います。

「いいね!」 1

@stanski この問題は解決しましたか?

「いいね!」 1

申し訳ありません。取り込み中で、これを更新するのを忘れていました。
すべての投稿を再構築した後、再度移行を試みたところ、異なるエラーメッセージが表示されました。
残念ながら、バックトレースが見つかりません。

エラーにもかかわらず、アップロードがBackblazeに移行され、投稿が更新されたようでした。
ローカルのアップロードをアーカイブして別の場所に移動しましたが、それ以降は何も苦情はありません。

結論として、はい、私の問題は解決しました。
@pfaffman さん、継続的なご提案ありがとうございます。

現在、さまざまなファイアウォールがbackblazeでホストされているアップロードをブロックしているという苦情がありますが、それは別の問題です。

CDNを使用することをお勧めします。

「いいね!」 1