Rails system command 不执行

miclle · 2012年04月09日 · 最后由 15612877305 回复于 2016年11月15日 · 3162 次阅读

@lgn21st @huacnlee 应用里有用 JAVA 写了一个扩展

def similarity
  system "cd #{Rails.root}/lib/tasks/java/similarities && nice -0 java -jar similarity.jar entityid #{self.id}"
end


本地用 WEBrick 跑开发/产品环境都会执行,但服务器上用 nginx+passenger 跑就不会执行,但我用 whenever 去定时执行是可以的 google 了很久,也没有找到原因

不用 system 用`cd #{Rails.root}/lib/tasks/java/similarities && nice -0 java -jar similarity.jar entityid #{self.id} ` 试试?

是不是权限问题?

我记得默认 passenger 启动后,会以 nobody 用户处理请求;试试修改运行一下 passenger 的用户?

权限问题或者是 PATH 环境变量问题导致找不到 nice 或者 java 命令

估计是权限问题,权限很折腾人的

@Ddl1st@lgn21st 感觉有 JQ(跑题请无视

分开执行吧,然后打日志。用 resuce 搞起来。

可能是$PATH 环境变量或者权限的问题

system 肯定会执行到的,估计是你 path 问题,建议写全路径 eg: /usr/bin/java

上午的时候问题已经解决了,要写全路径 #9 楼 @wxianfeng 你的建议是对的

建议不用这样的写法,可能有环境变量的问题导致不能执行,可以写成 sh 例如

#/bin/sh
export PATH=$PATH:/usr/local/ruby187/bin:/usr/local/ruby187/lib
cd /var/www/xxx
rake xxx:yyy

ruby 哪种方式能和 cmd 交互 比如 输入一段命令 可以获取到执行这段命名的结果,在根据结果进行输入在获取到结果

需要 登录 后方可回复, 如果你还没有账号请 注册新账号