0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Active StorageにCloudflare R2を使おうとした時に発生したAws::S3::Errors::InvalidRequest (You can only specify one non-default checksum at a time.)エラーの解決策

Posted at

はじめに

RailsのActive Storageを使ってCloudflare R2に画像をアップロードしようとした際に、Aws::S3::Errors::InvalidRequest (You can only specify one non-default checksum at a time.) というエラーに遭遇しました。
このエラーの原因と、その解決策について共有します。

こちらのisuueを参考にしたので、気になる方は参照ください。

エラーの原因

このエラーは、S3互換ストレージサービス(この場合はCloudflare R2)へのアップロード時に、AWS SDKがデフォルト以外の複数のチェックサム(checksum)を同時に指定しようとすることで発生します。

こちらのaws-sdk-rubyのissueで解説してくれてます。

解決策

この問題を解決するには、config/storage.yml ファイル内のCloudflare R2の設定に、request_checksum_calculationresponse_checksum_validation の2つのオプションを追加し、それぞれ"when_required"に設定します。

具体的には以下のように変更します。

config/storage.yml
cloudflare:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:cloudflare, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:cloudflare, :secret_access_key) %>
  region: auto
  bucket: <%= Rails.application.credentials.dig(:cloudflare, :bucket_name) %>
  endpoint: https://<%= Rails.application.credentials.dig(:cloudflare, :account_id) %>.r2.cloudflarestorage.com
  public: true
  request_checksum_calculation: "when_required" # <- この行を追加
  response_checksum_validation: "when_required" # <- この行を追加

まとめ

issueを読むとすぐに分かることではありますが、日本語で参考にできるものがあると便利だと思ったので、この記事を書いてみました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?