我将rails应用程序部署到Heroku上,并且我已将服务器上的aws访问键设置为环境变量。但是,要在开发环境中测试我的应用程序,我需要在本地计算机上的某个位置初始化它们。所以我决定以下几点。
/config/initailizers/init_aws_locally.rb
ENV['AWS_ACCESS_KEY_ID'] = 'my key'
ENV['AWS_SECRET_ACCESS_KEY'] = 'my secret key'
此文件已添加到.gitignore
但是,当我在开发环境中上传时,收到此错误消息:
Missing required arguments: aws_access_key_id, aws_secret_access_key
我想我忽略了在我的开发环境中包含我的aws键的简单步骤。但是,当我已经初始化密钥时,我不确定为什么会出现错误的原因。
供您参考,我使用的是载波,S3和雾。
配置/初始化/ fog.rb
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'], # required
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], # required
:region => 'us-east-1', # optional, defaults to 'us-east-1'
}
config.fog_directory = 'd' # required
config.fog_public = true # optional, defaults to true
end
谢谢。感谢您的帮助!
答案 0 :(得分:3)
您的初始值设定项将按字母顺序运行。见the docs:
如果初始化程序中有任何排序依赖项,则可以 通过命名控制加载顺序。例如,01_critical.rb将是 在02_normal.rb之前加载。
您遇到的问题是您的fog.rb初始化程序在init_aws_locally.rb之前运行(因为 f 位于 i 之前)。因此,在设置fog_credentials时尚未定义ENV ['AWS_ACCESS_KEY_ID']。
答案 1 :(得分:1)
我会避免在代码中添加任何凭据。这是一个非常可怕的想法,Heroku有正确的想法。所以我要做的是使用RVM并将文件.rvmrc放在我的项目文件夹中。我也将.rvmrc放在.gitignore中。
然后你编辑.rvmrc来拥有
导出AWS_ACCESS_KEY_ID =“BLAH”
等等等等。无论何时我“进入”这个目录,我的env都是由RVM为我设置的。如果您没有使用RVM,那么还有其他替代方案。rails s
它将包含您放在.rvmrc脚本中的所有环境变量设置。不需要初始化程序或仅开发yaml配置文件,您不受源代码管理。根据我的经验,这是最简单的解决方案。
答案 2 :(得分:0)
我去了我的shell并键入:
$ echo $ AWS_SECRET_ACCESS_KEY
它又回来了。事实证明我最近搬到了一个新的虚拟机,忘了把它添加到.bashrc文件中。为了以防万一,值得检查shell环境。一旦我将这两行添加到我的.bashrc中,一切都很高兴。