在乘客上跑时,系统命令不起作用

时间:2013-01-15 16:54:46

标签: passenger

我有一个sinatra应用程序,其中有一个页面显示有关该应用程序的一些信息。其中一些是通过在页面加载上运行命令生成的。在unicorn中运行时,我的MacBook上的一切正常,当在独角兽中运行时,一切都在生产服务器上工作正常,但是交换到Apache / Passenger,突然命令开始返回nil。

例如,获取我使用的提交者列表:

comitters = `cd /path/to/app && git shortlog -s -n`

这种方法非常有效,直到在apache / passenger设置中运行。

乘客中是否有禁用系统命令的选项?

1 个答案:

答案 0 :(得分:1)

问题在于您的$ PATH环境变量,系统用它来查找命令。你从shell运行Unicorn不是吗?所以Unicorn从你的shell继承了$ PATH。但是从Phusion Passenger启动的应用程序进程是从Apache / Nginx启动的,而Apache / Nginx通常是从一些系统初始化服务启动的,这些服务的环境变量与shell完全不同。请阅读http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/以获取解决方案。