2

我将我的 rails 应用程序部署到 Heroku 上,并在服务器上将 aws 访问密钥设置为环境变量。但是,要在开发环境中测试我的应用程序,我需要在本地机器上的某个地方初始化它们。所以我决定以下。

/config/inittailizers/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 密钥包含在我的开发环境中。但是我不确定为什么在我已经初始化密钥时出现错误的原因。

供您参考,我使用的是carrierwave、S3 和Fog。

配置/初始化程序/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

谢谢你。我感谢您的帮助!

4

3 回答 3

3

您的初始化程序将按字母顺序运行。请参阅文档

如果你的初始化器中有任何顺序依赖,你可以通过命名来控制加载顺序。例如,01_critical.rb 将在 02_normal.rb 之前加载。

您遇到的问题是您的 fog.rb 初始化程序在您的 init_aws_locally.rb 之前运行(因为f出现在i之前)。所以 ENV['AWS_ACCESS_KEY_ID'] 在设置fog_credentials 时(还)尚未定义。

于 2013-01-21T06:05:00.130 回答
1

我会避免将任何凭据放入代码中。这是一个非常糟糕的想法,而 Heroku 的想法是正确的。所以我要做的是使用 RVM 并将文件 .rvmrc 放在我的项目文件夹中。我也将 .rvmrc 放入 .gitignore 中。

然后你编辑 .rvmrc 有

导出 AWS_ACCESS_KEY_ID="BLAH"

等等等等。每当我“cd”到这个目录时,我的 env 都是由 RVM 为我设置的那个项目。如果您不使用 RVM,还有其他选择。

导轨

它将具有您放入 .rvmrc 脚本中的所有环境变量设置。无需初始化程序或仅开发 yaml 配置文件,这些文件不受源代码控制。根据我的经验,这是最简单的解决方案。

于 2013-01-21T05:10:56.747 回答
0

我去了我的外壳并输入:

$ 回声 $AWS_SECRET_ACCESS_KEY

它返回空白。原来我最近搬到了一个新的虚拟机上,忘记把它添加到 .bashrc 文件中。以防万一,值得检查一下 shell 环境。一旦我将这两行添加到我的 .bashrc 中,一切就又恢复了。

于 2013-09-12T06:14:07.977 回答