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

lb563 · August 08, 2012 · Last by Freeman1990 replied at September 22, 2017 · 3756 hits

当前 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 下有。

确实问题是文件的权限

Reply to lb563

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

You need to Sign in before reply, if you don't have an account, please Sign up first.