如何从Rails应用程序内部设置系统调用的路径?

时间:2012-06-07 14:41:46

标签: ruby-on-rails ruby-on-rails-3 phantomjs

我正在尝试从rails执行phantom.js模块。到目前为止,我已经成功安装了二进制文件,phantomjs的路径似乎工作正常。

但是,当我尝试使用反引号从rails应用程序运行它时(例如:phantomjs rasterize.js http://google.com 1.jpg),它表示没有这样的文件或目录。

我认为原因是它无法找到rasterize.js的路径 我尝试将rasterize.js文件放在公共文件夹内的#{Rails.root}中,在控制器文件夹中,但没有任何作用。

我该如何解决这个问题?

====

更新:为了澄清,我发布了哪些代码在我的控制器内工作,哪些代码无效。

def create
  'phantomjs'
end

< =上面的代码没有吐出路径错误,当我从浏览器发送请求时,phantomjs进程被调用,导致在服务器端打开控制台。

def create
  'phantomjs rasterize.js'
end

< =这不起作用,它吐出错误,说“没有这样的文件或目录”,这就是为什么我认为它与rails无法找到rasterize.js的路径有关。我尝试将rasterize.js放在公共文件夹,控制器文件夹内和主目录中:#{Rails.root},但它始终是相同的。

2 个答案:

答案 0 :(得分:0)

有趣......我一直在尝试各种组合,最后遇到一个有效的案例,而且这不符合我的预期:

%x("/usr/local/bin/phantomjs /Users/e/Dropbox/Projects/rails/screenshots/rasterize.js http://google.com app/assets/images/2709.jpg")

< =这不起作用。

system("/usr/local/bin/phantomjs /Users/e/Dropbox/Projects/rails/screenshots/rasterize.js http://google.com app/assets/images/2709.jpg")

< =这有效。

我认为这些都在内部相同,除了返回值?也许我错了?

答案 1 :(得分:0)

让我们说你的命令是cmd。很高兴知道%(cmd)exec(cmd),改变你所处的过程,所以如果你在轨道中并改变目录它将会出口。另一方面,“cmd”和system(cmd)将让您继续工作。

我从这个博客中了解到了这一点。 http://blog.jayfields.com/2006/06/ruby-kernel-system-exec-and-x.html