2012-09-09 49 views

回答

4

我不认为你可以= /。

我们在Rails应用程序中使用的一种解决方法是将ssh(ey ssh)添加到EngineYard并在vim /data/your_app_name/shared/config/exports.rb中创建一个文件。此文件可以是这个样子:

ENV["AWS_ACCESS_KEY_ID"] = "your key" 
ENV["AWS_SECRET_ACCESS_KEY"] = "your secret" 
ENV["AWS_BUCKET"] = "your bucket" 

然后在配置/的boot.rb您所需要的文件:

require File.expand_path('./exports', File.dirname(__FILE__)) 

这既不漂亮,也不费力。但是,它让你在你的应用中使用秘密,你不应该检查到源代码控制!

+1

你绝对可以使用厨师做到这一点,所以你的答案不是规定的方式。 – WattsInABox

+0

我很喜欢这个答案,它比你的无限好..因为你不提供替代品。 –

9

我们遇到了同样的问题,并要求EngineYard提供一些帮助。来自安永的Jim Neath带回以下回应:

不幸的是,乘客没有从系统通过环境变量 。你需要做的是建立一个红宝石包装, 使用这个定义你的环境变量和发射乘客,如 说明如下:

http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/

我已经创建了一个基本的自定义厨师食谱,将做到这本:

https://github.com/jimneath/ey-cloud-recipes/tree/master/cookbooks/passenger_env_vars

您将需要更新环境中的以下文件 变量:

/ey-cloud-recipes/blob/master/cookbooks/passenger_env_vars/templates/default/env.custom.erb

+2

我想我应该让每个人都知道这些自定义食谱中存在错误(可能是因为它们太旧了)。如果['app_master','app','solo'] default.rb应该是:'if ['app_master','app','solo']。include?(node [:instance_role])''而不是''。包括?(node [:role])' – WattsInABox

1

我的回答如果你想运行rake任务(即cron作业),需要这些环境变量,变量存储在/data/my_app/shared/config/env.custom

source /data/my_app/shared/config/env.custom && cd /data/my_app/current/ && bundle exec rake my_rake_task 
1

我以前也用Heroku现在我搬到了Engineyard。这是我如何得到我的ENvironemnt变量Heroku 我添加了宝石figaro。这个宝石基本上需要在app/config目录中的文件application.yml。当Rails应用程序初始化时,它将被执行并将以YAML格式设置的键值对加载到内存中。 HerokuFigaro可以选择设置application.yml的内容。

$ figaro heroku:set -e production 

然而,在Engineyard我们需要使用SCP选项EY包和其余的事情将由figaro进行手动复制application.yml

首先在gemfile中包含gem figaro并安装gem。
然后我们需要使用engineyard-hooks将文件/data/[your_app]/shared/config/application.yml复制到/data/[your_app]/current/config/application.yml。 我们需要使用before_restart

# inside your project repo create a 'deploy' folder and 
# inside deploy/before_restart.rb paste the following code with or without modifications 
# This file is executed everytime after deploy just before your app restarts 
on_app_servers_and_utilities do 
    # Copy the yaml files from `shared/config` to `current/config` 
    ['application.yml'].each do |file_name| 
    run "ln -nfs #{config.shared_path}/config/#{file_name} #{config.release_path}/config/#{file_name}" 
    end 
end 

提交更改,并推送到github上回购或其他地方。

高兴在这里,不存在文件/data/[your_app]/shared/config/application.yml。现在使用以下命令将文件从本地复制到服务器

# This copies the application.yml to every instance like app_master, app_slave, utilities, database, etc  
$ ey scp config/application.yml HOST:/data/[your_app_name]/shared/config/ -e app_environment --all 

现在您可以部署您的应用程序并获取所有环境变量。

注意:每次启动环境时,都需要调用上述命令将文件复制到服务器。意思是,如果你停止分期(例如),并在一段时间启动后,你需要调用以上命令

+0

https://cbabhusal.wordpress.com/2015/07/22/engineyard-ruby-on-rails-setting-environment-variables-at-once/ – illusionist