1

我想用上帝监控一个 ruby​​ 脚本并将 AWS 凭证作为环境变量传递,推荐的方法是什么?

我目前的做法:

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

我在 God conf 文件中设置了用户和组,以便进程以该特定用户身份启动,我将 access_key 和 api_secret 设置为该用户的环境变量。

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

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

这是我的conf文件:

脚本神.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']andENV['AWS_SECRET_ACCESS_KEY']时,它们没有设置。我究竟做错了什么 ?

4

2 回答 2

3

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

gem 'dotenv-rails'

将变量添加到项目根目录的.env文件(或生产特定变量的文件)中:.env.production

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 页面

于 2014-11-04T10:12:39.400 回答
1

因为脚本实际上并没有以该用户身份登录,所以它没有采购.bashrc并将.bash_profile值添加到环境中。您需要在上帝运行的环境中提供环境变量/值。

于 2014-11-04T08:46:19.457 回答