缺少必需的参数:aws_access_key_id,aws_secret_access_key

时间:2014-08-31 21:33:47

标签: ruby-on-rails

我正在使用带有S3斗的carriervawe和雾。我使用以下代码在开发中获得标题中的错误(当我运行rails srake db:migrate时):

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']
  }
  config.asset_host = "http://xxx.cloudfront.net"
  config.fog_directory = 'xxx'
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
  config.storage = :fog
end

我也尝试过使用(如建议here

<%= ENV['AWS_ACCESS_KEY_ID'] %>

但是我收到了这个错误:

syntax error, unexpected '<' (SyntaxError)

我的变量在application.yml文件中

AWS_ACCESS_KEY_ID:  AKIAIxxx...
AWS_SECRET_ACCESS_KEY:  1xxx...

2 个答案:

答案 0 :(得分:4)

不确定原因,但由于某种原因,您的环境变量可能被评估为nil。我喜欢使用figaro gem来管理我的环境变量。

只需添加

gem "figaro"

到您的gemfile。

然后运行

figaro install

将创建一个application.yml文件并将其添加到.gitignore中(出于安全原因非常重要)。在此之后,您应该能够将您的AWS密钥添加到application.yml,并像您当前拥有的那样在您的carrierwave配置中访问它们。

答案 1 :(得分:0)

如果这是来自Michael Hartl教程,我通过将初始化程序重命名为carrierwave.rb而不是carrier_wave.rb来解决我的问题,如教程中所建议的那样。然后我重新运行了git和Heroku命令,它在Heroku生产服务器上运行。