Rails heroku无效配置选项

当我部署到heroku并运行heroku run rake db:migrate我得到错误:

 ArgumentError: invalid configuration option `:aws_access_key_id' 

配置/初始化/ aws.rb

 if Rails.env.production? S3Client = Aws::S3::Client.new( aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], aws_region: 'us-east-1' ) end 

配置/初始化/ carrierwave.rb

 if Rails.env.production? CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1' } config.fog_directory = ENV['S3_BUCKET'] end end 

为什么我收到“无效配置选项”错误?

编辑

新的config / initializers / carrierwave.rb文件:

 if Rails.env.production? CarrierWave.configure do |config| config.fog_credentials = { provider: 'AWS', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1', aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], aws_region: 'us-east-1' } config.fog_directory = ENV['S3_BUCKET'] #config.fog_attributes = {:signature_version => :v4} end end 

config / initializers / aws.rb现在为空。

这已修复了invalid configuration option问题。 但是Missing required arguments: aws_access_key_id, aws_secret_access_key当我运行RAILS_ENV=production bundle exec rake assets:precompileMissing required arguments: aws_access_key_id, aws_secret_access_key它已被错误Missing required arguments: aws_access_key_id, aws_secret_access_key替换Missing required arguments: aws_access_key_id, aws_secret_access_key

更令人困惑的是,我设法成功运行了RAILS_ENV=production bundle exec rake assets:precompile在上述更改后RAILS_ENV=production bundle exec rake assets:precompile一次,但它突然停止工作。

创建Aws::S3::Client时的选项不以aws_开头。 那只是愚蠢的。

 if Rails.env.production? S3Client = Aws::S3::Client.new( access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1' ) end 

但是,您实际上不需要传递凭据选项:

默认凭据将从以下位置自动加载:

  • ENV [‘AWS_ACCESS_KEY_ID’]和ENV [‘AWS_SECRET_ACCESS_KEY’]

我按照此页面上的步骤进行操作http://lifesforlearning.com/uploading-images-with-carrierwave-to-s3-on-rails/

而不是PictureUploaded我在app / uploads / picture_uploader.rb中使用了ImageUploader而不是carrier_wave.rb或carrierwave.rb我在s3.rb中设置了环境变量。 在进行这些更改后,它对我有用。