【问题标题】:Phusion Passenger 4 & nginx cannot see environment variables in Ubuntu LinuxPhusion Passenger 4 & nginx 在 Ubuntu Linux 中看不到环境变量
【发布时间】:2015-05-08 20:41:24
【问题描述】:

根据https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#env_vars_passenger_apps 15.3.5 的文档,Phusion Passenger 应该从 .bashrc 读取环境变量。我正在尝试使用 nginx 和 Phusion 乘客从名为 rails 的用户帐户运行 rails 4.2 应用程序,当我尝试在浏览器中加载它时出现 502 bad gateway 错误。该过程在正确的用户下运行。当我在 rails app 目录中打开一个 ruby​​ 控制台时,我会看到来自 bashrc 的环境变量,包括 secret_key_base。但是,当我跟踪我的 nginx 日志时,我得到的错误是它无法找到 secret_key_base。我尝试在其他地方添加它,包括 /etc/bash.bashrc 和 /etc/nginx.conf。

【问题讨论】:

  • 不管怎样,您必须在服务器配置中指定 ruby​​ 可执行文件的路径是很常见的。我不知道 nginx 是如何做到这一点的,但我在配置 apache 服务器时被要求这样做。

标签: ruby-on-rails ruby nginx


【解决方案1】:

我已经找到了这个可怕问题的答案。答案在“Bash 中的提前终止”标题下的https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems。事实证明,如果 shell 不是交互式的,Ubuntu .bashrc 就不会运行。 Phusion Passenger 不在交互式 shell 中运行。因此,我们不会为 Phusion Passenger 进程加载这些环境变量。

Mike 的评论正常。如果您使用的是 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 中指定环境变量的工具。

【讨论】:

  • 非常感谢您回复答案,这绝对不是一件很容易弄清楚的事情,仅供将来参考,我在 RHEL 7 上,我的变量在 /etc/environment 上声明了它没有用。如您所述,从包装器中添加命令 source /etc/environment 就可以了。
  • 一个坏消息是Apache上的Passenger 5仍然存在问题。
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2023-04-06
  • 2015-03-07
  • 2020-02-03
  • 2017-08-08
  • 2016-05-31
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多