Rails 在 rails 中 call shell 到另外一个项目中执行命令?

lb563 · 2012年08月08日 · 最后由 Freeman1990 回复于 2017年09月22日 · 3762 次阅读

当前 rails 项目 /mrli/dev/cms 现在我在 action 中执行如下命令:

system "cd /mrli/dev/checker && bundle exec cucumber -p prod"

上面的命令是生成一个 report.html 文件到 checker/public 目录中

当我请求到这个 action 中的时候,却没有生成 report.html 文件,也就是说 action 没有 执行这个命令。

请问大家是不是在 rails 中执行 shell 命令不能 cd 到其它项目中执行呢?

可以的啊

1.9.3p194 :004 > system "cd /tmp && echo `pwd`"
/tmp
 => true

#1 楼 @hooopo 确实是可以在 consloe 环境下运行:

[4] pry(main)> system "cd /mrli/dev/checker && bundle exec cucumber -p prod"
Using the prod profile...
=> false

但是同样的在 action 中就没有执行成功:

def gen_report 
  system "cd /mrli/dev/checker && bundle exec cucumber -p prod"
  redirect_to root_path
end

#2 楼 @lb563 返回 false 说明意外终止了 你把输出打出来

我怎么觉得还需要考虑什么权限用户之类的东东

#3 楼 @hooopo 还有一个,我用rails s启动服务来执行这个命令就能成功,但是用 passenger+nginx 的方式就不行。

#4 楼 @ywjno 具体点呢?我感觉是 passenger 那里出了问题。

#6 楼 @lb563 比如说用户是否有生产文件的权限,或者当前用户是否有操作文件夹权限之类的

我也就是突然想到这方面,不一定就是这个原因。。。

你看看是不是环境有问题哦,在里面把当前的 env 给打出来。bundle 不一定在当前 path 下有。

确实问题是文件的权限

lb563 回复

请问是什么原因导致的这个问题?我也遇到了类似的问题。rails 调用其它脚本不成功。

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