假冒乘客没有看到环境变量?

问题描述 投票:6回答:3

我们正在为Rails 3.0x应用程序使用Nginx + Phusion Passenger运行ubuntu服务器。

我在测试机上的/ etc / environment中设置了环境变量:

MC_TEST=true

[如果我运行控制台(捆绑执行导轨c)并输出ENV [“ MC_TEST”],我会看到'true'。但是,如果我将同一代码放在页面上(),则看不到任何内容。该变量不存在。

哪个使我发问:

1-使用nginx(不是Apache SetEnv)将环境变量带入乘客的正确方法是什么?

2-为何乘客没有适当的环境?

ruby-on-rails ubuntu nginx passenger
3个回答
7
投票

Passenger Fusion v4 +支持直接从bashrc文件读取环境变量。确保bashrc驻留在执行乘客进程的用户的主文件夹中(在我的情况下,对于ec2 linux和nginx,它是ubuntu)

这里是[b0rc详细信息的documentation


4
投票

当在ubuntu上将nginx和nginx初始化脚本与乘客一起使用时,我也遇到同样的问题。原因是我使用sudo服务nginx restart(由init脚本安装)来启动nginx并它是由root运行的,而root没有获得您的登录用户环境变量。有两种解决方案。一种是手动运行nginx。

sudo service nginx stop
sudo -E /path/to/your/nginx

一个是将env添加到您的nginx初始化脚本中

export MC_TEST=true

后一种解决方案有点丑陋,但是可以。而且我认为更好的方法是找到一个配置来告诉初始化脚本以保留登录用户env。


0
投票

我还有另一个难看的解决方案。

env_file = '/etc/environment'
if File.exist?(env_file)
  text = File.open(env_file).read
  text.each_line do |line|
    key, val = line.split('=', 2)
    ENV[key] = val.strip
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.