【发布时间】: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