13

PhantomjsをHerokuで正常に動作させることができましたが、node.jsのphantomjs-nodeインターフェイスで問題が発生しています(https://github.com/sgentle/phantomjs-nodeを参照)。

ファントムを初期化しようとすると、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

アプリが起動したことをテストします。最後から3行目にURLが表示され、次のように表示されます。

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

成功した場合は、Hello World!が表示されます。ブラウザで。

これで、Herokuアプリケーションの実行と同じフォルダーから:

heroku run 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.js1637行目で発生しているようです。

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

ノードやファントムなどのバージョンのバリエーションを試してみましたが、うまくいきませんでした。

また、DYLD変数を設定するカスタムビルドパックも試しました。http://github.com/tecnh/heroku-buildpack-nodejsも参照してください

Phantom + NodeをHerokuでうまく一緒にプレイしている人は、私に知らせてください。Stackoverflowにはこれに関するいくつかの言及がありますが、「動作させました。方法は次のとおりです」とは誰も言っていません。

4

2 に答える 2

0

Heroku は WebSocket をサポートしていません。Socket.io には回避策があります。dnodeについては、どちらが使用するかわかりませんphantomjs-node

Heroku の WebSockets にも問題があり、Nodejitsuに切り替えて解決しました。

于 2013-01-27T21:58:31.680 に答える