2016-10-15 23 views
0

私はAWSラムダ関数で動作するようcasperjsを取得しようとしています。CasperJSとAWS Lambda

{ 
"errorMessage": "Cannot find module 'casper'", 
"errorType": "Error", 
"stackTrace": [ 
"Function.Module._load (module.js:276:25)", 
"Module.require (module.js:353:17)", 
"require (internal/module.js:12:17)", 
"Object.<anonymous> (/var/task/index.js:3:14)", 
"Module._compile (module.js:409:26)", 
"Object.Module._extensions..js (module.js:416:10)", 
"Module.load (module.js:343:32)", 
"Function.Module._load (module.js:300:12)", 
"Module.require (module.js:353:17)" 
] 
} 

私は、ラムダがcasperjsを検出することはできません。このエラーを取得しておきます。私はLambdaに自分のzipファイルをアップロードし、ファイルを圧縮する前にcasperjsモジュールを私のディレクトリにインストールしました。

私のpackage.jsonファイルにはcasperjsがインストールされているというメッセージがあります。

{ 
"name": "lambda", 
"version": "1.0.0", 
"description": "", 
"main": "index.js", 
"scripts": { 
"test": "echo \"Error: no test specified\" && exit 1" 
}, 
"keywords": [], 
"author": "", 
"license": "ISC", 
"dependencies": { 
"casperjs": "^1.1.3", 
} 
} 

私が間違っていることは誰にも分かりますか?ありがとう。

答えて

3

CasperJsがPhantomJsに依存しているので、あなたはこのレポと非常によく似た、それを設定することができます:https://github.com/TylerPachal/lambda-node-phantom

主な違いは、CasperJsを追加してターゲットにする必要があり、CasperJsがPhantomJsを見つけて読み込めるようにする必要があることです。

  1. パッケージディレクトリにnode_modulesディレクトリを作成します。

  2. がpackages.jsonファイルにCasperJsの依存関係を追加します。ターミナルで

    "dependencies": { 
        "casperjs": "latest" 
    } 
    
  3. 、node_modulesディレクトリにCasperJsパッケージを追加するために、あなたのパッケージディレクトリと実行「NPMの更新」に移動します。

  4. あなたは「試験」引数を指定してCasperJsを実行したいと仮定すると、index.jsファイルは次のように見えるように変更する必要があります:

    var childProcess = require('child_process'); 
    var path = require('path'); 
    
    exports.handler = function(event, context) { 
    
        // Set the path as described here: https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/ 
        process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT']; 
    
        // Set the path to casperjs 
        var casperPath = path.join(__dirname, 'node_modules/casperjs/bin/casperjs'); 
    
        // Arguments for the casper script 
        var processArgs = [ 
         'test', 
         path.join(__dirname, 'casper_test_file.js') 
        ]; 
    
        // Launch the child process 
        childProcess.execFile(casperPath, processArgs, function(error, stdout, stderr) { 
         if (error) { 
          context.fail(error); 
          return; 
         } 
         if (stderr) { 
          context.fail(error); 
          return; 
         } 
         context.succeed(stdout); 
        }); 
    } 
    

    あなたがCasperJsを実行しない場合'test'引数で引数リストから削除するだけです。

  5. パッケージのルートディレクトリにあるPhantomJsバイナリは、CasperJsが見つけることができるように、phantomjsに名前を変更する必要があります。 PhantomJsの新しいバージョンをご希望の場合は、を入手してください。 Lambdaで実行できるようにlinux-x86_64.tar.bz2タイプをダウンロードしてください。ダウンロードしたら、新しいバイナリをbinディレクトリから取り出して、ルートパッケージディレクトリに置きます。

  6. すべてのファイルにアクセスする権限をラムダに与えるためには、Unixライクなオペレーティングシステムでパッケージを解凍するのが最も簡単です。パッケージ内のすべてのファイルに読み取り権限と実行権限があることを確認します。パッケージディレクトリ内:chmod -R o+rx *。それから、それをつかむ:zip -r my_package.zip *

  7. ラムダ機能に圧縮されたパッケージをアップロードします。

+0

これは素晴らしいですが、私は1.9.8にphantomjsを固定しなければなりませんでした - 最近のバージョンはLambdaで失敗するでしょう。 – awendt

1

Casper.js Docsによると、実際にはノードモジュールではありません。だからあなたはPackage.jsonでそれを要求することはできず、ノードモジュールでそれを圧縮することはできません。ラムダインスタンスにインストールする方法や、必要なものを実行する実際のノードモジュールを見つける方法を見つける必要があります。私はラムダにキャスパーをインストールすることは不可能かもしれないと思うが、それはちょうど私の腸です。 CasperJSがNPM経由でインストール可能ですが、それはNodeJSモジュールではなく、箱から出してNodeJSでは動作しません 警告

。ノードでrequire( 'casperjs')を使用してcasperをロードすることはできません。 CasperJSはそこにある大多数のNodeJSモジュールを使用できないことに注意してください。あなたの最高の判断を試して、使用してください。

http://docs.casperjs.org/en/latest/installation.html