我尝试使用carrierwave将图像上传到S3。它在本地工作,但当我去部署到heroku时,我收到以下错误:
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_
access_key
键是肯定设置的,因为我在运行heroku时可以看到它们:config
我已经搜索了我在堆栈上找到的每个答案,并搜索了Google前三页的每个答案。他们都没有工作。
我知道上传有效,因此代码不是问题所在。我必须设置哪些设置或变量才能使其正常工作?
请帮助,我无法继续使用我的应用程序直到完成此操作(因此我可以再次部署到heroku而不会因为此错误而停止。)
答案 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>