Ruby on rails Rails 6 ActiveStorage中的直接上载问题

Ruby on rails Rails 6 ActiveStorage中的直接上载问题,ruby-on-rails,rails-activestorage,Ruby On Rails,Rails Activestorage,在尝试使用ActiveStorage的直接上载功能时,我遇到以下问题。我在params[:whitelist_headers]中搜索了错误的意外值,找到的唯一结果建议升级到最新版本的aws-sdk-s3。但是,我相信我使用的是最新版本的s3。这是我的档案: # frozen_string_literal: true source "https://rubygems.org" ruby File.read(File.join(__dir__, ".ruby-vers

在尝试使用ActiveStorage的直接上载功能时,我遇到以下问题。我在params[:whitelist_headers]中搜索了错误
的意外值,找到的唯一结果建议升级到最新版本的
aws-sdk-s3
。但是,我相信我使用的是最新版本的s3。这是我的档案:

# 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'

非常感谢您的帮助

我的问题通过在我的gem文件中将
gem'aws-sdk-s3'
替换为
gem'aws-sdk'
得到了解决

这可能不是理想的解决方案,因为状态如下:

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


我在一个旧的RubyonRails应用程序中遇到了类似的问题。我的问题是
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(发生在我身上)。

您可能不是因为使用
AWS SDK
gem而不是
AWS-SDK-s3
,而是因为您更新了SDK。我相信只要更新
aws-sdk-s3
就可以解决问题。看,我已经说过了,但是基于这样一个假设,发生在你身上的事也发生在我身上。要清除该假设,可以提供
Gemfile.lock
。我想您已经没有了它,但它与日志和
Gemfile
一样重要,因为这两个文件都没有显示Rails gems和
aws-sdk-s3
gem的确切版本。