[英]AWS OpsWorks Environment variables not working
我正在運行Ubuntu 14.04 LTS 64位Rails應用程序,我無法訪問我的App環境變量。
在OpsWorks App面板中,我設置了我的環境變量,比如說:
MYKEY: 1234
然后我再次保存並部署我的應用程序以使這些可見。
在我的Rails應用程序或rails控制台中,我得到零:
$ bundle exec rails c production
>ENV["MYKEY"]
=> nil
我試過重啟服務器。 我不確定我缺少什么,我一直在其他服務中使用環境變量。
如何追蹤這些應該設置的位置?
OpsWorks根據您正在部署的應用程序類型將環境變量存儲在不同的位置。 在Rails / Passenger上,它們應該保存在Apache配置文件#{your_app_name}.conf
。 ( 來源 )
這意味着它們在您的正常shell環境中不可用。
我知道Node.js配方將所有內容存儲在/srv/www/#{app_name}/shared/app.env
文件中......然后獲取該文件以/srv/www/#{app_name}/shared/app.env
環境以運行節點服務器。 這個實現細節還意味着你可以編寫源腳本來源app.env
文件,然后調用一些Node腳本或其他任何東西。
當然,Rails不是Node。 我不知道環境變量是否也存儲在其他地方:快速查看OpsWorks烹飪書中的Rails配方沒有發現任何明顯的東西,但也許我錯過了一些東西。
根據您在OpsWorks手冊中進行的修改量,您可以創建一個類似於此的部署配方:
application_environment_file do user deploy[:user] group deploy[:group] path ::File.join(deploy[:deploy_to], "shared") environment_variables deploy[:environment_variables] end
(也許調整路徑)
然后運行您的控制台,當您通過SSH連接到服務器時,執行類似的操作
sudo source /srv/www/my_app_name/shared/app.env; bundle exec rails console -e production
sudo source /srv/www/my_app_name/shared/app.env; bundle exec rails console -e production
或者其他什么。
AWS OpsWorks控制台允許您聲明環境變量,但為了讓它們可用於我們的Rails應用程序,我們需要使用Chef菜譜配方以及一些預防措施。
簡而言之,我們使用config / secrets.yml文件結合config / application.yml文件, Figaro gem和Chef cookbook配方 。 廚師食譜配方讀取OpsWorks控制台中定義的變量,並將它們提供給編寫config / application.yml文件的Rails應用程序。
我已經發布了詳細的指南來解釋它究竟是如何做到的。 鏈接在這里 。
這些是我所涵蓋的核心要點:
我(在紐約的AWS PopUp Loft的Bruno的幫助下)在after_restart.rb部署鈎子中添加了一些自定義Chef代碼,只需將文件夾“deploy”添加到你的apps根目錄,然后添加“after_restart.eb”。 在里面 ....
Chef::Log.info("Running deploy/after_restart.rb")
contents = []
node[:deploy].each do |application, deploy|
deploy[:environment_variables].each do |key, value|
contents << "export #{key}=\"'#{value}'\""
end
end
Chef::Log.info("Adding the environment variables to /etc/profile.d/startup_env_config.sh")
bash "create_startup_env_config.sh" do
user "root"
cwd "/etc/profile.d"
code <<-EOH
echo \''#{contents.join(" ")}\'' > startup_env_config.sh
source startup_env_config.sh
cd #{release_path}
EOH
end
就是這樣。 如果更新OpsWorks面板中的環境變量,請記住重新啟動實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.