Ruby on rails 普西翁客运4号及;nginx无法在Ubuntu Linux中查看环境变量

Ruby on rails 普西翁客运4号及;nginx无法在Ubuntu Linux中查看环境变量,ruby-on-rails,ruby,nginx,Ruby On Rails,Ruby,Nginx,根据15.3.5中的文件,乘客应从.bashrc中读取环境变量。我试图使用nginx和Phusion passenger从名为rails的用户帐户运行rails 4.2应用程序,当我尝试在浏览器中加载它时,会出现502坏网关错误。该过程在正确的用户条件下运行。当我在rails应用程序目录中打开ruby控制台时,我会看到bashrc中的环境变量,包括secret_key_base。然而,当我跟踪我的nginx日志时,我得到的错误是它无法找到secret\u key\u base。我试着在其他地方添

根据15.3.5中的文件,乘客应从.bashrc中读取环境变量。我试图使用nginx和Phusion passenger从名为rails的用户帐户运行rails 4.2应用程序,当我尝试在浏览器中加载它时,会出现502坏网关错误。该过程在正确的用户条件下运行。当我在rails应用程序目录中打开ruby控制台时,我会看到bashrc中的环境变量,包括secret_key_base。然而,当我跟踪我的nginx日志时,我得到的错误是它无法找到secret\u key\u base。我试着在其他地方添加这个,包括/etc/bash.bashrc和/etc/nginx.conf。

我找到了这个可怕问题的答案。答案在标题“Bash中的提前终止”下。事实证明,如果shell不是交互式的,Ubuntu.bashrc就不会运行。Phusion Passenger不在交互式外壳中运行。因此,我们不为Phusion乘客流程加载这些环境变量

迈克的评论是正确的。如果您使用的是rvm,那么nginx指向一个ruby脚本,您可以在ruby启动之前将环境变量放入其中

passenger_ruby /home/rails/.rvm/gems/ruby-2.2.1@was_i_towed/wrappers/ruby;
是我的nginx.conf文件中的一行。如果我在vi或nano中打开这个包装,那么我可以将EXPORT SECRET=添加到文件的顶部,它就可以工作了

其他文献表明,在/etc/environment中设置环境变量也应该有效


当升级到Phusion Passenger 5时,这个问题也应该是没有意义的,它有一个在nginx.conf中指定环境变量的工具

值得一提的是,您通常必须在服务器配置中指定ruby可执行文件的路径。我不知道nginx是如何做到这一点的,但我在配置apache服务器时被要求这样做。非常感谢你回复我的答案,这肯定不是一件很容易弄清楚的事情,只是为了将来的参考,我在RHEL 7上,我的VAR在/etc/environment上声明,但它仍然不起作用。正如您所描述的,从包装器中添加命令source/etc/environment就成功了。坏消息是Apache上的Passenger 5仍然存在这个问题。