我从heroku得知可以通过在本地运行heroku config:add MY_ENV_VAR=123
来添加环境变量。我怎样才能与engineyard实现同样的目标?在engineyard中设置环境变量
回答
我不认为你可以= /。
我们在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__))
这既不漂亮,也不费力。但是,它让你在你的应用中使用秘密,你不应该检查到源代码控制!
我们遇到了同样的问题,并要求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
我想我应该让每个人都知道这些自定义食谱中存在错误(可能是因为它们太旧了)。如果['app_master','app','solo'] default.rb应该是:'if ['app_master','app','solo']。include?(node [:instance_role])''而不是''。包括?(node [:role])' – WattsInABox
这是使用env.custom独角兽非常简单。看看这里https://stackoverflow.com/a/13741463/1520775
我的回答如果你想运行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
我以前也用Heroku
现在我搬到了Engineyard
。这是我如何得到我的ENvironemnt变量Heroku
我添加了宝石figaro
。这个宝石基本上需要在app/config
目录中的文件application.yml
。当Rails
应用程序初始化时,它将被执行并将以YAML
格式设置的键值对加载到内存中。 Heroku
Figaro
可以选择设置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
现在您可以部署您的应用程序并获取所有环境变量。
注意:每次启动环境时,都需要调用上述命令将文件复制到服务器。意思是,如果你停止分期(例如),并在一段时间启动后,你需要调用以上命令
https://cbabhusal.wordpress.com/2015/07/22/engineyard-ruby-on-rails-setting-environment-variables-at-once/ – illusionist
- 1. 设置环境变量
- 2. 设置Java环境变量?
- 3. 设置Maven环境变量
- 4. 设置环境变量
- 5. 设置环境变量
- 6. Elasticsearch设置环境变量
- 7. C#设置环境变量
- 8. htaccess设置环境变量
- 9. 设置apache环境变量
- 10. DrJava设置环境变量
- 11. 在Python中设置环境变量
- 12. 在javascript中设置环境变量
- 13. 在JavaScript中设置环境变量
- 14. 在Maven中设置环境变量
- 15. 在Docker中设置环境变量
- 16. 在Tomcat中设置环境变量TESSDATA_PREFIX
- 17. 在git中设置环境变量
- 18. 在ubuntu10.4中设置环境变量
- 19. 在Cygwin中设置环境变量
- 20. 在MAMP中设置环境变量?
- 21. 在WebStorm中设置Node.js环境变量
- 22. 在Windows 7中设置环境变量
- 23. 在C中设置环境变量
- 24. 在Rails中设置环境变量
- 25. 在WCF中设置环境变量
- 26. 在Java Applet中设置环境变量
- 27. 烧瓶/ gunicorn:从环境变量设置环境变量
- 28. 在eclipse中设置引用其他环境变量的环境变量
- 29. 在mac上设置DERBY_HOME环境变量?
- 30. 设置环境变量在詹金斯
你绝对可以使用厨师做到这一点,所以你的答案不是规定的方式。 – WattsInABox
我很喜欢这个答案,它比你的无限好..因为你不提供替代品。 –