AWS OpsWorks环境变量无效

pet*_*ept 9 ruby-on-rails aws-opsworks

我正在运行Ubuntu 14.04 LTS 64位Rails应用程序,我无法访问我的App环境变量.

在OpsWorks App面板中,我设置了我的环境变量,比如说:

MYKEY: 1234
Run Code Online (Sandbox Code Playgroud)

然后我再次保存并部署我的应用程序以使这些可见.

在我的Rails应用程序或rails控制台中,我得到零:

$ bundle exec rails c production
>ENV["MYKEY"]
=> nil
Run Code Online (Sandbox Code Playgroud)

我试过重启服务器.我不确定我缺少什么,我一直在其他服务中使用环境变量.

如何追踪这些应该设置的位置?

Rya*_*cox 4

OpsWorks 将环境变量存储在不同的位置,具体取决于您要部署的应用程序类型。在 Rails/Passenger 上,它们应该保存在 Apache 配置文件中#{your_app_name}.conf。(来源

这意味着它们在您的正常 shell 环境中不可用。

我知道 Node.js 配方将所有内容存储在一个/srv/www/#{app_name}/shared/app.env文件中...然后将其引入环境以运行 Node 服务器。此实现细节还意味着您可以编写获取该app.env文件的 shell 脚本,然后调用某些 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管他呢。