根据https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#env_vars_passenger_apps中的文档15.3.5 Phusion Passenger应该从.bashrc读取环境variables。 我试图从名为rails的用户帐户使用nginx和Phusion乘客运行一个rails 4.2应用程序,并得到一个502错误的网关错误,当我尝试在浏览器中加载它。 该过程在正确的用户下运行。 当我在Rails应用程序目录中打开ruby控制台时,会看到我的bashrc中的环境variables,包括secret_key_base。 但是,当我尾巴我的nginx日志我得到的错误是,它无法findsecret_key_base。 我试过在其他地方添加这个文件,包括/etc/bash.bashrc和/etc/nginx.conf。
我已经找到了这个可怕的问题的答案。 答案在https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems标题下的“在Bash中提前终止”。 事实证明,如果shell不是交互式的,则Ubuntu .bashrc不会运行。 Phusion Passenger不能在交互式shell中运行。 因此我们不会为Phusion Passenger进程加载这些环境变量。
迈克的评论是正确的。 如果你使用的是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中指定环境变量的工具。