AWS OpsWorks 环境变量不起作用
AWS OpsWorks Environment variables not working
我是 运行 Ubuntu 14.04 LTS 64 位 Rails 应用程序,我无法访问我的应用程序环境变量。
在 OpsWorks App 面板中,我设置了我的环境变量,例如:
MYKEY: 1234
然后我再次保存并部署我的应用程序以使这些可见。
在我的 Rails 应用程序或 rails 控制台中,我得到 nil:
$ bundle exec rails c production
>ENV["MYKEY"]
=> nil
我试过重启服务器。我不确定我错过了什么,我一直在其他服务中使用环境变量。
我如何追踪这些设置的位置?
OpsWorks 根据您部署的应用类型将环境变量存储在不同的位置。在 Rails / Passenger 上,它们应该保存在 Apache 配置文件 #{your_app_name}.conf
中。 (Source)
这意味着它们在您的正常 shell 环境中不可用。
我知道 Node.js 配方将所有内容都存储在 /srv/www/#{app_name}/shared/app.env
文件中...然后将其用于将环境拉入 运行 节点服务器。此实现细节还意味着您可以编写 shell 源该 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
或其他。
我(在纽约 AWS PopUp Loft 的 Bruno 的帮助下)在 after_restart.rb 部署挂钩中添加了一些自定义 Chef 代码,只需将文件夹 "deploy" 添加到您的应用程序根目录,然后在里面添加 "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 面板内的环境变量,记得重启您的实例。
AWS OpsWorks 控制台允许您声明环境变量,但为了让它们可用于我们的 Rails 应用程序,我们需要使用 Chef 食谱和一些预防措施。
简而言之,我们使用 config/secrets.yml 文件结合 config/application.yml 文件, Figaro gem 和 Chef 食谱。
Chef 食谱食谱读取 OpsWorks 控制台中定义的变量,并让 Rails 编写 config/application.yml 文件的应用程序可以使用它们。
我已经发布了一份详细的指南来解释具体如何操作。 Link here.
这些是我涵盖的核心要点:
- 使用config/secrets.yml文件(从Rails 4.1添加)
- 使用Figarogem加载环境变量
- 在 AWS OpsWorks 控制台中声明环境变量
- 使用自定义 Chef 食谱创建一个 config/application.yml 文件,Figaro 将使用该文件让变量可用
我是 运行 Ubuntu 14.04 LTS 64 位 Rails 应用程序,我无法访问我的应用程序环境变量。
在 OpsWorks App 面板中,我设置了我的环境变量,例如:
MYKEY: 1234
然后我再次保存并部署我的应用程序以使这些可见。
在我的 Rails 应用程序或 rails 控制台中,我得到 nil:
$ bundle exec rails c production
>ENV["MYKEY"]
=> nil
我试过重启服务器。我不确定我错过了什么,我一直在其他服务中使用环境变量。
我如何追踪这些设置的位置?
OpsWorks 根据您部署的应用类型将环境变量存储在不同的位置。在 Rails / Passenger 上,它们应该保存在 Apache 配置文件 #{your_app_name}.conf
中。 (Source)
这意味着它们在您的正常 shell 环境中不可用。
我知道 Node.js 配方将所有内容都存储在 /srv/www/#{app_name}/shared/app.env
文件中...然后将其用于将环境拉入 运行 节点服务器。此实现细节还意味着您可以编写 shell 源该 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
或其他。
我(在纽约 AWS PopUp Loft 的 Bruno 的帮助下)在 after_restart.rb 部署挂钩中添加了一些自定义 Chef 代码,只需将文件夹 "deploy" 添加到您的应用程序根目录,然后在里面添加 "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 面板内的环境变量,记得重启您的实例。
AWS OpsWorks 控制台允许您声明环境变量,但为了让它们可用于我们的 Rails 应用程序,我们需要使用 Chef 食谱和一些预防措施。
简而言之,我们使用 config/secrets.yml 文件结合 config/application.yml 文件, Figaro gem 和 Chef 食谱。 Chef 食谱食谱读取 OpsWorks 控制台中定义的变量,并让 Rails 编写 config/application.yml 文件的应用程序可以使用它们。
我已经发布了一份详细的指南来解释具体如何操作。 Link here.
这些是我涵盖的核心要点:
- 使用config/secrets.yml文件(从Rails 4.1添加)
- 使用Figarogem加载环境变量
- 在 AWS OpsWorks 控制台中声明环境变量
- 使用自定义 Chef 食谱创建一个 config/application.yml 文件,Figaro 将使用该文件让变量可用