我们使用Nginx + Phusion Passenger为我们的rails 3.0x应用程序运行ubuntu服务器。
我在testing机器上的/ etc / environment中设置了一个环境variables:
MC_TEST=true
如果我运行一个控制台(bundle exec rails c)并输出ENV [“MC_TEST”],我看到'true'。 但是,如果我把相同的代码放在页面上(<%= ENV [“MC_TEST”]%>),它什么都看不到。 该variables不存在。
这让我质疑:
1 – 使用nginx(不是apache的SetEnv)把环境variables转换成乘客的正确方法是什么?
2 – 为什么乘客没有适当的环境?
Passenger fusion v4 +可以直接从bashrc文件中读取环境变量。 确保bashrc位于执行乘客进程的用户的home文件夹中(在我的情况下,这是ubuntu,用于ec2 linux和nginx)
这里是详细介绍bashrc的文档
当在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
后面的解决方法是某种丑陋的,但它的作品。 我认为更好的方法是找到一个配置,告诉init脚本保存登录用户env。
我有另一个丑陋的解决方案。
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