簡體   English   中英

AWS OpsWorks環境變量無效

[英]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 gemChef cookbook配方 廚師食譜配方讀取OpsWorks控制台中定義的變量,並將它們提供給編寫config / application.yml文件的Rails應用程序。

我已經發布了詳細的指南來解釋它究竟是如何做到的。 鏈接在這里

這些是我所涵蓋的核心要點:

  1. 使用config / secrets.yml文件(從Rails 4.1添加)
  2. 使用Figaro gem在環境中加載變量
  3. 在AWS OpsWorks Console中聲明環境變量
  4. 使用自定義Chef配方創建一個配置/ application.yml文件,Figaro將使用該文件來提供變量

我(在紐約的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM