gpt4 book ai didi

node.js - 在 Heroku 上运行 Phantomjs + Node 时遇到问题

转载 作者:IT老高 更新时间:2023-10-28 23:08:49 26 4
gpt4 key购买 nike

我已经成功让 Phantomjs 在 Heroku 上工作,但现在我遇到了 node.js 的 phantomjs-node 接口(interface)的问题(请参阅 https://github.com/sgentle/phantomjs-node )。

当我尝试初始化 Phantom 时,我看到了 10-15 秒的延迟,然后:

> phantom stdout: ReferenceError: Can't find variable: socket

phantom stdout: phantomjs://webpage.evaluate():1
phantomjs://webpage.evaluate():1
phantomjs://webpage.evaluate():1

您可以通过以下步骤或通过在 https://github.com/matellis/phantom-test 下拉我的测试应用程序来重现问题。

git init phantom-test
cd phantom-test
heroku apps:create
# create node app as per Heroku instructions here https://devcenter.heroku.com/articles/nodejs
# copy bin and lib folders from http://phantomjs.googlecode.com/files/phantomjs-1.6.1-linux-x86_64-dynamic.tar.bz2 into root of your new project
# if you don't do this step you'll get an error "phantom stderr: execvp(): No such file or directory"
git add .
git commit -m "init"
git push heroku

测试你的应用已经启动,倒数第三行会告诉你URL,它应该是这样的:

http://fathomless-ravine-5563.herokuapp.com deployed to Heroku

如果成功,您应该会看到 Hello World!在您的浏览器中。

现在从与您的 Heroku 应用程序相同的文件夹运行:

heroku run node

在 Node 提示符下尝试以下操作:

phantom = require('phantom');
x = phantom.create();

等待 10-15 秒,您应该会看到错误。从现在起没有任何效果。

这应该输出文件 foo.png:

x = phantom.create(function(ph){ph.createPage(function(page){ page.open('http://bbcnews.com', function(status){ page.render('foo.png', function(result) {ph.exit()}); }); }); });

要验证 Phantomjs 在 Heroku 上是否正常工作,请使用我的测试项目尝试以下操作:

>heroku run bash
Running `bash` attached to terminal... up, run.1
~ $ phantomjs test.js http://bbcnews.com foo.png
~ $ ls *.png
foo.png

我无法在本地重现任何这些问题,但报告了其他问题,人们可能在本地遇到此问题。

问题似乎起源于 shim.js 第 1637 行:

s.on('request', function(req) {
var evil;
evil = "function(){socket.emit('message', " + (JSON.stringify(JSON.stringify(req))) + " + '\\n');}";
return controlPage.evaluate(evil);
});

我尝试了不同版本的 Node 、幻象等,但没有成功。

我还尝试了设置 DYLD 变量的自定义构建包,请参阅 http://github.com/tecnh/heroku-buildpack-nodejs也没有运气。

任何在 Heroku 上使用 Phantom + Node 玩得很好的人请告诉我。 Stackoverflow 上有几个关于此的引用,但没有人说“我让它工作,这就是方法”。

最佳答案

我从未使用过 phantomjs Node 模块,但我确实有一个在 Heroku 上同时运行 Node 和 phantomjs 的应用程序。

您需要使用自定义构建包才能使其正常工作。我的 .buildpacks file看起来像

http://github.com/heroku/heroku-buildpack-nodejs.git
http://github.com/stomita/heroku-buildpack-phantomjs.git

然后您应该能够在子进程中运行 phantomjs 脚本:

var script = app.get('root') + '/scripts/rasterize.js' //the phantomjs script to run
, bin = app.get('phantom') //normally this would just be the string "phantomjs"
, spawn = require('child_process').spawn;

// set up args to the phantom cli
// (run the phantomjs command in your terminal to see options/format)
var args = [];
// ...

var phntm = spawn(bin, args);

phntm.stdout.on('data', function (data) { /* do something */ });
phntm.stderr.on('data', function (data) { /* do something */ });
phntm.on('exit', function (code) { /* handle exit */ });

关于node.js - 在 Heroku 上运行 Phantomjs + Node 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com