Ruby on rails Shell命令在生产模式下的Rails中失败

Ruby on rails Shell命令在生产模式下的Rails中失败,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我在VPS上部署了一个Rails 4应用程序,它根据任务执行shell命令。该应用程序在Nginx上运行,有乘客 我现在的情况是,所有shell命令都不能工作。经过一点调试后,我注意到每个命令都返回一条NotFound错误消息 例如: out = %x[date 2>&1] # outputs 'sh: 1: date: not found\n' 为什么会这样?是否应该设置一些配置设置以允许在生产模式下使用shell命令?我对rails很陌生,所以我不确定是什么原因导致了这种情

我在VPS上部署了一个Rails 4应用程序,它根据任务执行shell命令。该应用程序在Nginx上运行,有乘客

我现在的情况是,所有shell命令都不能工作。经过一点调试后,我注意到每个命令都返回一条NotFound错误消息

例如:

out = %x[date 2>&1] # outputs 'sh: 1: date: not found\n' 
为什么会这样?是否应该设置一些配置设置以允许在生产模式下使用shell命令?我对rails很陌生,所以我不确定是什么原因导致了这种情况

更新:


这里有更多的信息,当从rails whoami查询时,如果我打印$PATH我得到/usr/local/lib/ruby/gems/2.1.0/bin,那么如果在命令行中执行sudo-u www-data-printenv-PATH,结果是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/usr/bin:/sbin。。。这有意义吗?

这不是系统调用,而是shell命令。显然,壳牌的路径上没有日期。尝试以相同的方式打印它。使用echo$PATH命令执行相同操作会产生/usr/local/lib/ruby/gems/2.1.0/bin\n,而如果我在命令行中执行此操作,它会输出/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/games:/usr/local/games,为什么?您的shell用户的$PATH与ruby进程不同。好的,但是ruby和ruby生成的所有进程都应该继承父进程的环境,因此$PATH设置正确,不是吗?我想我可以使用每个可执行文件的完整路径,但是这不利于代码的可移植性。你知道吗?