私はヘッドレスブラウジングのためにSpookyJS、CasperJS、PhantomJSツールチェーンを使ってウェブサイトをクロールするために小さなラムダ関数を一緒に投げました。この作業は非常に簡単で、数ヶ月前にラムダで作業していました。私は最近、いくつかのことを変えなければならず、プロジェクトに再び取り組みたいと思っていましたが、新しく始めてラムダをどんなに大きな誤りもなく走らせるのに問題がありました。私の質問はですラムダでファントムを実行するにはどうすればいいですか?AWS Lambdaにphantomjsノードアプリケーションを配備する方法は?
私が実行しているサンプルコードは次のとおりです。私はラムダで取得しています
spooky.start('http://en.wikipedia.org/wiki/Spooky_the_Tuff_Little_Ghost');
spooky.then(function() {
this.emit('hello', 'Hello, from ' + this.evaluate(function() {
return document.title;
}));
});
spooky.run();
エラーは次のとおりです。
{ [Error: Child terminated with non-zero exit code 1] details: { code: 1, signal: null } }
私はすべてを確実にするための様々な手順に従っている上で実行することができますラムダ。推奨されているよう
- 実行ローカル
node index.js
を使用して、それを確認します。以下は、私は診断しようとしてきたものの長いリストがありますNPMインストール通話用とEC2インスタンス上here - 実行
npm install
を説明し、そして再び - がすべてをアップジップ正しい出力を確保するために
node index.js
を実行して、CLIに
マイpackage.jsonは以下のとおりです。
{
"name": "lambda-spooky-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"casperjs": "^1.1.3",
"phantomjs-prebuilt": "^2.1.10",
"spooky": "^0.2.5"
}
}
私もほとんども、ローカルに作業(以下、およびAWS EC2インスタンス上ではなく、ラムダの同じエラーで試みた:
- しよう
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'] + ':' + process.env['LAMBDA_TASK_ROOT'] + '/node_modules/.bin'; console.log('PATH: ' + process.env.PATH);
点検産卵がBを呼び出してcasperjsとphantomjsを確保ファントム
- の非-prebuiltバージョンはパスからアクセスできますそれは、ローカルおよびEC2上で動作を確認し、
{ '0': 'casperjs', '1': [ '/var/task/node_modules/spooky/lib/bootstrap.js', '--transport=http', '--command=casperjs', '--port=8081', '--spooky_lib=/var/task/node_modules/spooky/lib/../', '--spawnOptions=[object Object]' ], '2': {} }
が直接
.exec('casperjs')
と.exec('phantomjs --version')
を呼び出しますが、ラムダに次のエラーを取得します。yラッピングchild_processの.spawn()
コールは、以下のようになりました。コマンド:`require('child_process').exec('casperjs', (error, stdout, stderr) => { if (error) { console.error('error: ' + error); } console.log('out: ' + stdout); console.log('err: ' + stderr); });
両方次のような結果と:
err: Error: Command failed: /bin/sh -c casperjs
module.js:327
throw err;
^
Error: Cannot find module '/var/task/node_modules/lib/phantomjs'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/var/task/node_modules/.bin/phantomjs:16:15)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
2016-08-07T15:36:37.349Z b9a1b509-5cb4-11e6-ae82-256a0a2817b9 sout:
2016-08-07T15:36:37.349Z b9a1b509-5cb4-11e6-ae82-256a0a2817b9 serr: module.js:327
throw err;
^
Error: Cannot find module '/var/task/node_modules/lib/phantomjs'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/var/task/node_modules/.bin/phantomjs:16:15)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
誰かがこれを見つけて同様の問題を抱えている場合。上記の後であっても、私はまだ "0以外の終了コード1で終了した子"に悩まされていました。私はnode_modulesのcasperjsディレクトリに入り、npm_updateを実行しなければなりませんでした。親 – Nick