2012-09-04 7 views
13

Phantomjsが正常に動作するようになりましたが、現在はnode.jsのphantomjs-nodeインターフェイスに関する問題が発生しています(https://github.com/sgentle/phantomjs-node参照)。Heroku上でPhantomjs +ノードを実行する際に問題が発生しました

私は、私は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で私のテストのアプリを引き下げることにより、問題を再現することができます

http://fathomless-ravine-5563.herokuapp.com deployed to Heroku 
:あなたのアプリが来ているテスト、あなたのURLを教えてくれる最後の行の3番目のは、それは次のように

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 

お読みください10

成功した場合は、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 

を私はローカルでこれらの問題のいずれかを再現することはできませんが、人々がローカルでこの問題にぶつかったかもしれない他の問題が報告されています。私は運を持つなどのノード、ファントムのバージョンのバリエーションを試してみた

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

問題がshim.jsライン1637に由来すると思われます。

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

私が知りたいと思っている人は誰でもPhantom + Nodeを一緒に遊んでいる人に教えてください。これについては、Stackoverflowにいくつかの言及がありますが、誰も "私はそれを働かせました。

+0

あなたはこの答えを見つけましたか?私はまた、herokuでphantomjsとnodejsをうまくプレイしようとしています:http://goo.gl/oIhPU –

+0

あなたはHeroku用にコンパイルされたphantomjsを持っていますか? –

+2

Herokuはphantom.jsアプリのためにこのビルドパックを推奨しているようです:https://github.com/stomita/heroku-buildpack-phantomjs - それはあなたの参照よりも最近更新されています。あなたはそれを試しましたか? – friism

答えて

0

HerokuはWebSocketをサポートしていません。 Socket.ioにはworkaroundがあります。わからないdnodeについてはphantomjs-nodeを使用しています。

私はHerokuのWebSocketsにも問題がありましたが、私はNodejitsuに切り替えました。私はそれを解決しました。

2

私はphantomjsノードモジュールを使ったことはありませんが、私はノードとphantomjsの両方をHeroku上で実行しています。

これを機能させるには、カスタムビルドパックを使用する必要があります。私.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 */ });