在发动机场中设置环境变量

时间:2012-09-09 20:18:42

标签: ruby-on-rails engineyard

我从heroku了解到,可以通过在本地运行heroku config:add MY_ENV_VAR=123来添加环境变量。如何与发动机厂实现同样的目标?

5 个答案:

答案 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

答案 1 :(得分: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"

然后在config / boot.rb中需要文件:

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

这既不漂亮也不轻松。但是,它允许您在应用程序中使用不应检查源代码管理的秘密!

答案 2 :(得分:4)

使用env.custom的Unicorn非常简单。在这里查看我的答案https://stackoverflow.com/a/13741463/1520775

答案 3 :(得分: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

答案 4 :(得分:1)

我之前使用的是Heroku,现在我已转移到Engineyard。这就是我在Heroku中获取我的ENvironemnt变量的方法 我添加了gem figaro。这个gem基本上需要application.yml目录中的文件app/config。初始化Rails应用时,会执行该应用并将以YAML格式设置的键值对加载到内存中。在Heroku Figaro中可以选择设置application.yml的内容。

$ figaro heroku:set -e production

但是,在Engineyard中,我们需要使用application.yml SCPEY包来手动复制/data/[your_app]/shared/config/application.yml,其余内容将由figaro完成。

首先在gemfile中包含gem figaro并安装gem 然后,我们需要使用engineyard-hooks将文件/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 hook

/data/[your_app]/shared/config/application.yml

提交您的更改并推送到您的github仓库或其他地方。

到此为止,文件# 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 不存在。现在使用以下命令将文件从本地复制到服务器

// do not know datatype yet
(type) signalValue;

        // signal is Integer object
        if (SysjInput[1] instanceof Integer) {
                signalValue = (int) SysjInput[1];

        // signal is String object
        } else if (SysjInput[1] instanceof String) {
                signalValue = (String) SysjInput[1];

        // signal is Double object  
        } else if (SysjInput[1] instanceof Double) {
                signalValue = (double) SysjInput[1];
        }

System.out.println(signalValue)

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

  

注意:每次启动环境时,都需要调用上述命令将文件复制到服务器。意味着如果你停止升级(例如)并在一段时间后启动它,那么你需要调用上面的命令