Rails]在开发环境中初始化雾

时间:2013-01-21 05:06:36

标签: ruby-on-rails heroku carrierwave fog

我将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

谢谢。感谢您的帮助!

3 个答案:

答案 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中,一切都很高兴。