我正在运行Ubuntu 14.04 LTS 64位Rails应用程序,我无法访问我的App环境变量。
在OpsWorks App面板中,我设置了我的环境变量,比如说:
MYKEY: 1234
然后我再次保存并部署我的应用程序以使其可见。
在我的Rails应用程序或rails控制台中,我得到nil:
$ bundle exec rails c production
>ENV["MYKEY"]
=> nil
我尝试重启服务器。我不确定我缺少什么,我一直在其他服务中使用环境变量。
如何追踪应该设置的位置?
答案 0 :(得分:4)
OpsWorks根据您正在部署的应用类型将环境变量存储在不同的位置。在Rails / Passenger上,它们应保存在Apache配置文件#{your_app_name}.conf
中。 (Source)
这意味着它们在您的正常shell环境中不可用。
我知道Node.js配方将所有内容存储在/srv/www/#{app_name}/shared/app.env
文件中......然后获取该文件以引入环境以运行节点服务器。此实现细节还意味着您可以编写源脚本app.env
文件的shell脚本,然后调用某些节点脚本或其他任何内容。
当然,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
或其他什么。
答案 1 :(得分:3)
AWS OpsWorks控制台允许您声明环境变量,但让它们可用于我们的Rails应用程序,我们需要使用Chef菜谱配方以及一些预防措施。
简而言之,我们使用 config / secrets.yml 文件与 config / application.yml 文件, Figaro gem 和< strong>厨师食谱配方。 厨师食谱配方读取OpsWorks控制台中定义的变量,并将它们提供给Rails应用程序,编写config / application.yml文件。
我已经发布了详细的指南来解释它究竟是如何做到的。 Link here
这些是我所涵盖的核心要点:
答案 2 :(得分:1)
我(在纽约的AWS PopUp Loft的Bruno帮助下)在after_restart.rb部署挂钩中添加了一些自定义Chef代码,只需添加文件夹&#34; deploy&#34;到您的应用程序根目录和内部添加&#34; after_restart.eb。&#34;在它....
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面板中的环境变量,请记住重新启动实例。