【问题标题】:Rails heroku invalid configuration optionRails heroku 无效的配置选项
【发布时间】:2015-10-16 15:17:40
【问题描述】:

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

ArgumentError: invalid configuration option `:aws_access_key_id'

config/initializers/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

config/initializers/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 问题。但是,当我运行RAILS_ENV=production bundle exec rake assets:precompile 时,它已被错误Missing required arguments: aws_access_key_id, aws_secret_access_key 替换。

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

【问题讨论】:

  • 你是在heroku还是你自己的机器上运行预编译?
  • 我自己的机器。我认为。我只是在命令行输入RAILS_ENV=production bundle exec rake assets:precompile
  • 在这种情况下,您需要在本地计算机上设置 ENV 变量。我通常为此使用 dotenv。我也让 Heroku 编译资产。
  • devcenter.heroku.com/articles/rails-4-asset-pipeline。手动编译资产很容易出错,并且会给 git 更改列表增加很多噪音。

标签: ruby-on-rails heroku


【解决方案1】:

创建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']

【讨论】:

  • 解决了原来配置选项无效的问题。但是,执行RAILS_ENV=production bundle exec rake assets:precompile 会给出错误消息Missing required arguments: aws_access_key_id, aws_secret_access_key。但是heroku config 表明他们在场。怎么回事??
  • 是 AWS 客户端还是导致错误的载波?
  • 愚蠢!我在载波中遇到了同样的错误。谢谢。
  • 我收回! (见编辑)。它正在工作,但突然Missing required arguments 错误又回来了。
【解决方案2】:

我按照这个页面上的步骤http://lifesforlearning.com/uploading-images-with-carrierwave-to-s3-on-rails/

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

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2016-06-20
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多