【发布时间】:2015-08-28 16:09:50
【问题描述】:
我有一个运行我们的 Rails 应用程序的生产服务器,其中有 ENV 变量,格式正确。它们显示在 rails c 中,但我们无法在应用实例中识别它们。
在 ubuntu 机器上运行 puma、nginx。
每次更改 .bashrc 需要重新启动什么?这就是我们所做的:
1.编辑.bashrc
2.. .bashrc
3.重启彪马
4.重启nginx
仍然无法识别..但是在 rails c 中,我们缺少什么?
编辑:
根据其他帖子的建议将环境变量添加到/etc/environment,说.bashrc 仅适用于特定的shell 会话,这可能会产生影响。据说/etc/environment 可供所有用户使用,所以这是我的。仍然有同样的问题:
- 在 rails c 中显示良好
- 当我在 shell 中回显它们时显示良好
-
不显示在应用程序中
export G_DOMAIN=sandboxbaa3b9cca599ff0.mailgun.org export G_EMAIL=mailgun@sandboxbaa3ba3806d5b499ff0.mailgun.org export GEL=support@xxxxxx.com PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
编辑:
在应用程序中,我以纯 html 格式请求 G_DOMAIN 和 G_EMAIL(这适用于使用 dotenv 进行开发,一旦使用 ubuntu 服务器推送到生产服务器就不起作用):
ENV TEST<BR>
G_DOMAIN: <%= ENV['G_DOMAIN'] %><br>
G_EMAIL:<%= ENV['G_EMAIL'] %>
但是,可以使用以下 env 变量(在 .bashrc 和 /etc/environment 中,与我们上面显示的所有变量相同),因为我们的图像可以正常工作并在生产环境中毫无问题地上传到 s3。
生产.rb
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
edit2:这可能与美洲狮问题有关吗?
https://github.com/puma/puma/commit/a0ba9f1c8342c9a66c36f39e99aeaabf830b741c
【问题讨论】:
-
你有没有想过让应用程序从文本文件而不是环境变量中读取数据,这些数据可能会像这样发生变化?它更简单、更可靠。
-
这对我来说是正确的,但我不确定您是否需要重新启动
NGINX。您确定要为您的应用程序更新.bashrc中的环境变量吗?因此,例如,就我而言,我在服务器上运行了多个应用程序,因此我需要以应用程序用户身份登录,重新加载.bashrc,然后在同一上下文/文件夹中重新启动应用程序(在我的情况下为unicorn,但puma应该是一样的,只是不那么神秘:)。 -
@steveklein 我们使用了正确的
.bashrc,因为其他env变量被拾取得很好,并且在同一个文件中。只有我们添加的最新版本有问题 -
@MaxWilliams 我们可以这样做,但是我们已经在 .bashrc 中的所有变量都可以正常工作,我宁愿找出我们做错了什么
-
因此,如果您更改“现有”变量的值,它会在应用程序中被拾取,但新变量无法识别?听起来像是某个地方的错字...您可以使用来自
.bashrc的经过消毒的 sn-p 更新您的帖子。
标签: ruby-on-rails nginx environment-variables