我想用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']
时,它们未设置。我做错了什么?
答案 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
并将值添加到环境中。您需要在上帝运行的环境中提供环境变量/值。