我正在使用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命令。如果打开本地服务器以外的页面,此命令可以正常运行。
答案 0 :(得分:1)
您必须使用puma等多线程Web服务器。
有关不同选项的概述,请参阅here。
另一个陷阱可能是你的控制器逻辑。如果由幻像呈现的页面触发与调用幻像的页面相同的控制器操作,则会创建无限循环。
然后,即使是多线程服务器也会卡住:)
此问题与PhantomJS.rb freezing when trying to screen capture page in my rails application重复 请关闭这一个。我缺乏这样做的声誉或将其写为评论。