【问题标题】:Problem with direct uploads in Rails 6 ActiveStorageRails 6 ActiveStorage 中的直接上传问题
【发布时间】:2021-01-27 06:32:50
【问题描述】:

我在尝试使用 ActiveStorage 的直接上传功能时遇到以下错误。我搜索了错误unexpected value at params[:whitelist_headers],发现的唯一结果建议升级到最新版本的aws-sdk-s3。但是,我相信我使用的是最新版本的 s3。这是我的 Gemfile:

# frozen_string_literal: true

source "https://rubygems.org"
ruby File.read(File.join(__dir__, ".ruby-version")).chomp

gem "rails", "~> 6.0"
gem "rails-i18n"

gem "bootsnap", require: false
gem "foreman"
gem "pg"
gem "puma", "~> 4.3"
...
...
...

gem 'aws-sdk-s3', require: false
gem 'mini_magick'

gem 'rack-cors

还有错误信息:

Started POST "/rails/active_storage/direct_uploads" for 127.0.0.1 at 2020-10-12 17:14:51 -0500
Processing by ActiveStorage::DirectUploadsController#create as JSON
  Parameters: {"blob"=>{"filename"=>"Screen Shot 2020-10-02 at 4.02.49 PM.png", "content_type"=>"image/png", "byte_size"=>120011, "checksum"=>"06QCMFP69Z4HT6w98ugkyQ=="}, "direct_upload"=>{"blob"=>{"filename"=>"Screen Shot 2020-10-02 at 4.02.49 PM.png", "content_type"=>"image/png", "byte_size"=>120011, "checksum"=>"06QCMFP69Z4HT6w98ugkyQ=="}}}
   (0.3ms)  BEGIN
  ActiveStorage::Blob Create (0.3ms)  INSERT INTO "active_storage_blobs" ("key", "filename", "content_type", "byte_size", "checksum", "created_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["key", "ai7p1m5pknvo2wstwc6nw8ihf31h"], ["filename", "Screen Shot 2020-10-02 at 4.02.49 PM.png"], ["content_type", "image/png"], ["byte_size", 120011], ["checksum", "06QCMFP69Z4HT6w98ugkyQ=="], ["created_at", "2020-10-12 22:14:51.332510"]]
   (0.4ms)  COMMIT
  S3 Storage (0.8ms) Generated URL for file at key: ai7p1m5pknvo2wstwc6nw8ihf31h ()
Completed 500  in 10ms (ActiveRecord: 1.1ms | Allocations: 6659)

ArgumentError (unexpected value at params[:whitelist_headers]):

aws-sdk-core (3.46.2) lib/aws-sdk-core/param_validator.rb:32:in `validate!'
aws-sdk-core (3.46.2) lib/aws-sdk-core/param_validator.rb:13:in `validate!'
aws-sdk-core (3.46.2) lib/aws-sdk-core/plugins/param_validator.rb:23:in `call'
aws-sdk-core (3.46.2) lib/seahorse/client/plugins/raise_response_errors.rb:14:in `call'

感谢任何帮助

【问题讨论】:

  • 我已经answered 这个了,但基于你发生的事情也发生在我身上的假设。要清除该假设,您可以提供您的Gemfile.lock。我猜你不再拥有它,但它与日志和 Gemfile 一样重要,因为两者都没有显示 Rails gems 和 aws-sdk-s3 gem 的确切版本。

标签: ruby-on-rails rails-activestorage


【解决方案1】:

通过在我的 Gemfile 中将 gem 'aws-sdk-s3' 替换为 gem 'aws-sdk',解决了我的问题。

这可能不是一个理想的解决方案,因为docs 声明如下:

或者,aws-sdk gem 包含所有可用的 AWS 服务 gem。这颗宝石非常大;建议仅将其用作从 V2 迁移的快速方法,或者如果您依赖许多 AWS 服务。

【讨论】:

  • 您可能不是因为使用aws-sdk gem 而不是aws-sdk-s3 而解决了问题,而仅仅是因为您更新了SDK。我敢肯定,只要更新aws-sdk-s3 也可以解决。见my answer
【解决方案2】:

我在一个较旧的 Ruby on Rails 应用程序中遇到了类似的问题。我的问题是 aws-sdk-s3 gem 在 2019 年 8 月 30 日发布的版本 1.48.0 中引入了 whitelist_headers 选项。Rails 6 在 2020 年 5 月 6 日发布的版本 6.0.3.1 中开始使用此选项。因为 Active Storage gem没有将 AWS SDK 指定为其依赖项,很有可能您更新了 Active Storage,而将 AWS SDK 抛在了后面(发生在我身上)。

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2018-12-31
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多