【发布时间】:2016-05-07 11:57:30
【问题描述】:
我正在使用 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);
});
我假设问题是,rails 正在等待脚本完成,而 phantomjs 正在尝试访问 rails 服务器,但是由于服务器很忙,所以它们都互相支持。
有什么解决办法吗?
编辑地址@Artjom B.:
1) 是的,我在 ubuntu 14.04 LTS 上使用 PhantomJS 2.0,我会尝试更早的版本。
2)不确定你在这里问什么,我无法以这种方式从 phantomjs 访问日志,所以我看不到任何记录到控制台的内容。如果您知道解决此问题的方法,请告诉我。似乎无法在来自 ruby 的 phantomjs 调用上运行 -debugger。
3) 是的,该脚本在命令行中运行良好,完全没有问题。
4) 也不关注你。 Phantomjs.run 命令在测试操作下从我的控制器触发。如果打开本地服务器以外的页面,此命令运行良好。
【问题讨论】:
-
不接受多个连接的 Rails 服务器?我不这么认为,但我对rails一无所知。你在使用 PhantomJS 2 吗?您是否尝试过使用 PhantomJS 1.9.7?您是否检查了
page.open()回调的第一个参数(status)?如果从命令行运行 PhantomJS 脚本会返回吗?您是否正在从/路径运行 gem 命令,这样您实际上是在创建一个递归炸弹?此问题中没有足够的信息来诊断您的问题。请回答每个澄清请求并edit您的问题以添加缺失的信息。 -
@ArtjomB。我已经编辑了我的帖子以反映对您问题的回答。感谢您抽出时间来帮助我!
-
for 2) 我的意思是
page.open('http://localhost:3000', function (status) { if (status !== "success") {phantom.exit(1);}...。一般来说,在 PhantomJS 上打开 localhost 会出现问题,但到目前为止我还没有遇到过这个问题。 -
@ArtjomB。啊,我明白了,我添加了那行,服务器仍然冻结。这就像 phantomjs 挂在 page.open('localhost:3000' 上并且不会走得更远。
-
@pguardiario 我正在使用应该处理并发进程的 Puma。
标签: javascript ruby-on-rails ruby phantomjs