6

我从 heroku 知道可以通过在heroku config:add MY_ENV_VAR=123本地运行来添加环境变量。我怎样才能用engineyard实现同样的目标?

4

5 回答 5

9

我们遇到了同样的问题,并向 EngineYard 寻求帮助。来自安永的 Jim Neath 回复如下:

不幸的是,乘客没有从系统获得传递的环境变量。您需要做的是创建一个 ruby​​ 包装器,该包装器定义您的环境变量并使用它启动乘客,如下所述:

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

于 2012-10-18T13:10:54.657 回答
4

This is pretty simple for Unicorn using env.custom. Take a look at my answer here https://stackoverflow.com/a/13741463/1520775

于 2012-12-06T10:25:45.003 回答
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__))

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

于 2012-09-21T07:43:34.207 回答
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
于 2013-09-27T04:37:37.347 回答
1

我以前也在使用,Heroku现在我搬到了Engineyard. 这就是我在Heroku 添加 gem中获取 ENvironemnt 变量的方式figaro。这个 gem 基本上需要目录application.yml中的app/config文件。当Rails应用程序初始化时,它会被执行并将格式设置的键值对加载YAML到内存中。在Heroku Figaro有选项来设置的内容application.yml

$ figaro heroku:set -e production

但是,Engineyard我们需要手动复制 package 的application.ymlusingSCP选项,EY其余的事情将由figaro完成。

首先在 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

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

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

于 2015-07-22T03:15:11.983 回答