Ruby on rails ENV变量仅在生产控制台中可用,在应用程序中不可用--Rails、Figaro Gem

Ruby on rails ENV变量仅在生产控制台中可用,在应用程序中不可用--Rails、Figaro Gem,ruby-on-rails,ruby,linux,environment-variables,Ruby On Rails,Ruby,Linux,Environment Variables,我正在使用figaro gem,并根据文档创建了一个包含所有变量的application.yml文件。此application.yml文件位于共享文件夹中(我使用的是capistrano),并与当前live app目录中的config/application.yml进行了符号链接,但是我只能访问rails控制台中的变量,而不能访问应用程序。我的证书如下(真实详细信息省略): 注意:我尝试过删除“”语音标记,并在列表前面加上production:每行有2个空格,而不是制表符,并且不能解决任何问题。

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

注意:我尝试过删除“”语音标记,并在列表前面加上production:每行有2个空格,而不是制表符,并且不能解决任何问题。该文件的权限与以相同方式实现的database.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精彩的专业railscast剧集之后,我设置了我的linux机箱

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

如果有人需要更多的代码,就大声喊出来

编辑 我删除了figaro gem,实现了以下railscasts教程中所示的yaml配置:。我认为这实际上就是figaro gem所做的,但是本教程没有使用ENV变量,而是使用CONFIG[:variables],这似乎很有效。

每一条评论:

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


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

Passen phusion或unicorn?我使用nginx、unicorn、Postgres。对于s3秘密,我会使用纯yml而不是环境变量,但是如果您真的想使用env方式:对于nginx,您必须在配置文件的主上下文中设置环境变量。您遇到问题的原因是nginx以自己的用户身份运行,当您登录并运行控制台时,您是另一个用户。请将此作为答案,我很乐意接受。我改成了一个yml配置,我把它添加到了我的问题中,但我不知道为什么它们不显示。你的解释很有道理,谢谢!我知道现在已经晚了将近3年了,但是你能详细说明一下如何让变量“活在它的空间里”吗?我遇到了完全相同的问题-rails c产品将Figaro.env.secret\u key\u base作为有效值提供给我,但是config/secrets.yml中的env[“secret\u key\u base”]无法识别它。我收到生产环境的
缺少密钥\u base,请在config/secrets.yml>中设置此值