我從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. 設置Maven環境變量
- 3. 設置Java環境變量?
- 4. 設置apache環境變量
- 5. 設置環境變量
- 6. DrJava設置環境變量
- 7. C設置環境變量
- 8. 設置環境變量
- 9. C#設置環境變量
- 10. 設置環境變量(kubernetes)
- 11. 設置環境變量Windows
- 12. htaccess設置環境變量
- 13. Elasticsearch設置環境變量
- 14. 設置環境變量Linux
- 15. 在javascript中設置環境變量
- 16. 在ubuntu10.4中設置環境變量
- 17. 在WCF中設置環境變量
- 18. 在git中設置環境變量
- 19. 在AWS中設置環境變量EBS
- 20. 在Cygwin中設置環境變量
- 21. 在WebStorm中設置Node.js環境變量
- 22. 在Docker中設置環境變量
- 23. 在Python中設置環境變量
- 24. 在Java Applet中設置環境變量
- 25. 在Maven中設置環境變量
- 26. 在C中設置環境變量
- 27. 在MAMP中設置環境變量?
- 28. 在Gitconfig中設置GIT_SSH環境變量
- 29. 在Tomcat中設置環境變量TESSDATA_PREFIX
- 30. 在WinDbg中設置環境變量
你絕對可以使用廚師做到這一點,所以你的答案不是規定的方式。 – WattsInABox
我很喜歡這個答案,它比你的無限好..因爲你不提供替代品。 –