从localhost上的Rails控制器执行时,PhantomJS脚本挂起

时间:2015-10-08 17:22:28

标签: javascript ruby-on-rails ruby phantomjs

我正在使用phantomjs gem:https://github.com/colszowka/phantomjs-gem

从控制器启动脚本时:

Phantomjs.run('./public/javascripts/test.js')

当脚本运行时,rails服务器挂起,等待它完成。

phantomjs脚本'test.js'看起来像这样:

var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 1080 };
page.open('http://localhost:3000', function () {
  window.setTimeout(function () {
    page.render('./public/test.png');
    phantom.exit();
  }, 3000);
});

我假设问题是,当phantomjs试图访问rails服务器时,rails正在等待脚本完成,但由于服务器很忙,它们都互相支持。

任何解决方案?

编辑地址@Artjom B。:

1)是的我在ubuntu 14.04 LTS上使用PhantomJS 2.0,我会试用早期版本。
2)不确定你在这里问什么,我无法通过这种方式从phantomjs访问日志,因此我无法看到任何登录到控制台的内容。如果您知道解决方法,请告诉我。似乎无法在红宝石的phantomjs电话上运行-debugger 3)是的,脚本在命令行中运行良好,完全没有问题 4)也不要跟着你。在测试操作下,我的控制器正在触发Phantomjs.run命令。如果打开本地服务器以外的页面,此命令可以正常运行。

1 个答案:

答案 0 :(得分:1)

您必须使用puma等多线程Web服务器。

有关不同选项的概述,请参阅here

另一个陷阱可能是你的控制器逻辑。如果由幻像呈现的页面触发与调用幻像的页面相同的控制器操作,则会创建无限循环。

然后,即使是多线程服务器也会卡住:)

此问题与PhantomJS.rb freezing when trying to screen capture page in my rails application重复 请关闭这一个。我缺乏这样做的声誉或将其写为评论。