Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services CasperJS和AWS Lambda_Amazon Web Services_Casperjs_Aws Lambda - Fatal编程技术网

Amazon web services CasperJS和AWS Lambda

Amazon web services CasperJS和AWS Lambda,amazon-web-services,casperjs,aws-lambda,Amazon Web Services,Casperjs,Aws Lambda,我试图让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.<ano

我试图让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)"
]
}

有人知道我做错了什么吗?谢谢

根据Casper.js文档,它实际上不是一个节点模块。因此,您不能在Package.json中要求它并使用节点模块将其压缩。您需要找到如何在lambda实例上安装它,或者找到一个实际的节点模块来实现您想要的功能。我怀疑在lambda上安装casper可能是不可能的,但那只是我的直觉

警告 虽然CasperJS可以通过npm安装,但它不是NodeJS模块,也不会在开箱即用的情况下使用NodeJS。无法通过在节点中使用require('casperjs')加载casper。请注意,CasperJS无法使用绝大多数NodeJS模块。尝试并运用你的最佳判断


根据Casper.js文档,它实际上不是一个节点模块。因此,您不能在Package.json中要求它并使用节点模块将其压缩。您需要找到如何在lambda实例上安装它,或者找到一个实际的节点模块来实现您想要的功能。我怀疑在lambda上安装casper可能是不可能的,但那只是我的直觉

警告 虽然CasperJS可以通过npm安装,但它不是NodeJS模块,也不会在开箱即用的情况下使用NodeJS。无法通过在节点中使用require('casperjs')加载casper。请注意,CasperJS无法使用绝大多数NodeJS模块。尝试并运用你的最佳判断


由于CasperJs依赖于PhantomJs,您可以将其设置为与此repo非常类似的方式:

主要区别在于,您需要添加和定位CasperJs,并且需要确保CasperJs能够找到并加载PhantomJs

  • 在包目录中创建一个node_modules目录

  • 将CasperJs的依赖项添加到packages.json文件:

    "dependencies": {
        "casperjs": "latest"
    }
    
  • 在终端中,导航到包目录并运行“npm update”将CasperJs包添加到node_modules目录

  • 假设您希望使用'test'参数运行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);
        });
    }
    
    如果不想使用“test”参数运行CasperJs,只需将其从参数列表中删除即可

  • 包根目录中的PhantomJs二进制文件需要重命名为PhantomJs,以便CasperJs可以找到它。如果您想获得PhantomJs的新版本,可以在此处获得:。确保下载linux-x86_64.tar.bz2类型,以便它可以在Lambda中运行。下载后,只需从bin目录中取出一个新的二进制文件,并将其放在根包目录中

  • 为了使Lambda拥有访问所有文件的权限,在类Unix的操作系统中压缩包是最容易的。确保包中的所有文件都具有读取和执行权限。从软件包目录中:
    chmod-ro+rx*
    。然后用:
    zip-r my_package.zip*
    将其压缩

  • 将压缩包上载到Lambda函数


  • 因为CasperJs依赖于PhantomJs,所以您可以将其设置为与此repo非常相似:

    主要区别在于,您需要添加和定位CasperJs,并且需要确保CasperJs能够找到并加载PhantomJs

  • 在包目录中创建一个node_modules目录

  • 将CasperJs的依赖项添加到packages.json文件:

    "dependencies": {
        "casperjs": "latest"
    }
    
  • 在终端中,导航到包目录并运行“npm update”将CasperJs包添加到node_modules目录

  • 假设您希望使用'test'参数运行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);
        });
    }
    
    如果不想使用“test”参数运行CasperJs,只需将其从参数列表中删除即可

  • 包根目录中的PhantomJs二进制文件需要重命名为PhantomJs,以便CasperJs可以找到它。如果您想获得PhantomJs的新版本,可以在此处获得:。确保下载linux-x86_64.tar.bz2类型,以便它可以在Lambda中运行。下载后,只需从bin目录中取出一个新的二进制文件,并将其放在根包目录中

  • 为了使Lambda拥有访问所有文件的权限,在类Unix的操作系统中压缩包是最容易的。确保包中的所有文件都具有读取和执行权限。从软件包目录中:
    chmod-ro+rx*
    。然后用:
    zip-r my_package.zip*
    将其压缩

  • 将压缩包上载到Lambda函数


  • 这很好,但我必须将phantomjs固定到1.9.8–更新的版本会在Lambda上失败。这很好,但我必须将phantomjs固定到1.9.8–更新的版本会在Lambda上失败。我们可能使用它。我们可能使用它