Heroku S3 Env变量

时间:2014-04-11 07:51:10

标签: ruby-on-rails heroku amazon-s3 carrierwave

我尝试使用carrierwave将图像上传到S3。它在本地工作,但当我去部署到heroku时,我收到以下错误:

   ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_
     access_key

键是肯定设置的,因为我在运行heroku时可以看到它们:config

我已经搜索了我在堆栈上找到的每个答案,并搜索了Google前三页的每个答案。他们都没有工作。

我知道上传有效,因此代码不是问题所在。我必须设置哪些设置或变量才能使其正常工作?

请帮助,我无法继续使用我的应用程序直到完成此操作(因此我可以再次部署到heroku而不会因为此错误而停止。)

2 个答案:

答案 0 :(得分:2)

一些信息:


环境变量

  

您在调用环境变量时出现问题   Heroku的。 ENV vars基本上是存储在OS中的变量/   环境,这意味着您必须为每个环境设置它们   您尝试部署应用程序

heroku config应该是你所设置的ENV。如果您没有看到ENV['AWS_ACCESS_KEY']等,则表示您未正确设置它们,正如所解释的那样简单,只需调用命令heroku config:add YOUR_ENV_VAR=VAR


<强>费加罗

我想建议您使用Figaro

这是一个宝石,基本上存储config/application.yml中的本地ENV变量。这允许您在本地存储ENV变量;但更重要的是,allows you to sync them with Heroku使用此命令:

rake figaro:heroku

这将在Heroku上设置env变量,允许您按照其他答案中的建议将它们与Carrierwave一起使用

答案 1 :(得分:1)

听起来你已经在Heroku上设置了ENV变量,但你需要将它们连接到CarrierWave。

config/initializers/fog.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',
    :aws_access_key_id      => Rails.configuration.s3_access_key_id,
    :aws_secret_access_key  => Rails.configuration.s3_secret_access_key,
  }
end

environments/<environment>.rb文件中

Rails.application.configure do
  config.s3_access_key_id     = ENV['S3_ACCESS_KEY_ID']
  config.s3_secret_access_key = ENV['S3_SECRET_ACCESS_KEY']
end

这将您的Rails配置设置为Heroku上的ENV变量,使其可用Rails.configuration.<key>