GOD和环境变量:如何管理凭据?

时间:2014-11-02 15:06:50

标签: ruby environment-variables god

我想用god监视ruby脚本并将AWS凭证作为环境变量传递,建议的方法是什么?

我目前的做法:

我想将带有源代码的神配置文件提交给github,因此我无法在神配置文件中将凭据设置为纯文本。我试图将它们设置为系统环境变量:

我在神配置文件中设置用户和组,以便进程以此特定用户开始,我将access_key和api_secret设置为此用户的环境变量。

当我以该用户身份登录并回显环境变量时,它们被正确设置。上帝是由新贵开始的。

当上帝启动脚本时,它无法在环境变量中找到凭据,我不明白为什么?

以下是我的conf文件:

script.god.rb

rails_env   = ENV['RAILS_ENV']  || "production"
rails_root  = ENV['RAILS_ROOT'] || "/srv/www/photo-api/current"

God.watch do |w|
  w.name          = "zipper-done"
  w.group         = 'zipper'
  w.interval      = 30.seconds
  w.dir           = rails_root
  w.env           = { 'RAILS_ENV' => rails_env }
  w.start         = "bundle exec rake zip:listen"
  w.uid           = 'deploy'
  w.gid           = 'deploy'
  w.start_grace   = 10.seconds
  w.log           = File.join(rails_root, 'log', 'zipper-done.log')

/home/deploy/.bashrc

 export AWS_ACCESS_KEY_ID=AKI...KQ
 export AWS_SECRET_ACCESS_KEY=Cg...pVb

/home/deploy/.bash_profile

 source ~/.bashrc

当我放ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY']时,它们未设置。我做错了什么?

2 个答案:

答案 0 :(得分:3)

由于您无论如何都要将这些文件存储在文件中(例如,不是使用Puppet,Chef,heroku config等设置它们),您可以使用dotenv。将它添加到您的Gemfile:

gem 'dotenv-deployment'

在项目的根目录中将变量添加到.env文件(如果设置了.env.production,则设置为ENV['RACK_ENV']文件):

AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...

它们将以ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY']提供。

不要忘记在.env中加入.gitignore个文件。出于文档目的,您可以将.env复制为带有空值的未标记.env.example

有关Rails和Capistrano的具体说明,请参阅gem page

答案 1 :(得分:1)

由于该脚本实际上并未以该用户身份登录,因此它不会导出.bashrc.bash_profile并将值添加到环境中。您需要在上帝运行的环境中提供环境变量/值。