ENV变量仅在生产控制台中可用,而不是在应用程序中 - Rails,Figaro Gem

时间:2013-10-18 22:17:53

标签: ruby-on-rails ruby linux environment-variables

我正在使用figaro gem并根据文档创建了一个包含所有变量的application.yml文件。这个application.yml文件位于一个共享文件夹中(我正在使用capistrano)并且在当前的live app目录中符号链接到config / application.yml,但是我只能访问rails控制台而不是应用程序中的变量。我的凭据列出如下(省略实际细节):

注意:我已经尝试删除“”语音标记,并在此列表前加上生产:每行有2个空格,没有标签,并且它没有解决任何问题。该文件的权限与databse.yml文件完全相同,777,以同样的方式实现。

application.yml

FFMPEG_LOCATION: "/path/to/ffmpeg"
EMAIL_USERNAME: "me@gmail.com"
EMAIL_PASSWORD: "password"
S3_BUCKET: "my_bucket"
AWS_SECRET_KEY_ID: "my_secret_key"
AWS_ACCESS_KEY_ID: "my_access_key"

我可以在生产控制台=>

中访问这些变量
Loading production environment (Rails 3.2.14)
irb(main):001:0> ENV["S3_BUCKET"]
=> "my-s3-bucket-name"

然而,他们不会在应用程序本身返回任何内容。我按照Ryan优秀的专业版轨道广播节目http://railscasts.com/episodes/335-deploying-to-a-vps

设置了我的linux盒子

如何在应用程序本身中访问这些变量?

如果有人需要更多代码,请大声喊。

修改 我删除了figaro gem实现了以下railscasts教程中显示的yaml配置:http://railscasts.com/episodes/85-yaml-configuration-revised。我认为这实际上是figaro gem正在做的事情而不是使用ENV变量,本教程使用CONFIG [:variables]似乎工作得很好。

1 个答案:

答案 0 :(得分:2)

每条评论:

Nginx作为自己的用户运行,因此环境变量需要存在于其空间中。作为用户,当您登录并运行控制台时,您将访问一组不同于nginx用户访问的环境变量。

如果您选择将它们添加到main上下文中的nginx配置,则可以执行此操作。但是直接使用yaml并将你的秘密令牌添加到你的yaml文件中可能会更容易。