2017-12-27 4 views
1

Wenn ich Upload web3 Module mache dann auf AWS Lambda-Funktion immer diese error.Please mir sagen, was Grund istAWS und web3 Einsatz in Lambda-Funktion Fehler

{ 
    "errorMessage": "/var/task/node_modules/scrypt/build/Release/scrypt.node: invalid ELF header", 
    "errorType": "Error", 
    "stackTrace": [ 
    "Object.Module._extensions..node (module.js:597:18)", 
    "Module.load (module.js:487:32)", 
    "tryModuleLoad (module.js:446:12)", 
    "Function.Module._load (module.js:438:3)", 
    "Module.require (module.js:497:17)", 
    "require (internal/module.js:20:19)", 
    "Object.<anonymous> (/var/task/node_modules/scrypt/index.js:3:20)", 
    "Module._compile (module.js:570:32)", 
    "Object.Module._extensions..js (module.js:579:10)", 
    "Module.load (module.js:487:32)", 
    "tryModuleLoad (module.js:446:12)", 
    "Function.Module._load (module.js:438:3)", 
    "Module.require (module.js:497:17)", 
    "require (internal/module.js:20:19)", 
    "Object.<anonymous> (/var/task/node_modules/scrypt.js/node.js:1:76)", 
    "Module._compile (module.js:570:32)", 
    "Object.Module._extensions..js (module.js:579:10)", 
    "Module.load (module.js:487:32)", 
    "tryModuleLoad (module.js:446:12)", 
    "Function.Module._load (module.js:438:3)", 
    "Module.require (module.js:497:17)" 
    ] 
} 
+0

Sie können weitere Informationen zu Ihrem Problem hinzufügen, wenn Sie Hilfe erwarten. Wenn das Problem nur mit web3js zu tun hat, würde ich erwarten, dass mehr Leute danach fragen. Welche Version von web3 verwendest du? Welche Version von Node im Lambda? –

+0

Mögliches Duplikat von [bcrypt ungültiger Elf-Header bei laufender Knoten-App] (https://stackoverflow.com/questions/15809611/bcrypt-invalid-elf-header-when-running-node-app) –

Antwort

0

Das Problem ist, dass Ihr Scrypt Modul für kompiliert OSX und ist nicht mit dem Betriebssystem kompatibel, auf dem die Lambdas ausgeführt werden. In serverless' git wird das Problem diskutiert.

die Lösungen hier zu bringen, ein paar gegeben, durch Kennu erste ist, schlägt er eine eigenen „installieren“ Skript im package.json hinzuzufügen:

"install": "[ -e node_modules/sharp/build/Release/sharp.node ] || docker run --rm -v $PWD:/data -w /data node:4 npm install sharp" 

Die Lösung, die ich gegeben wurde verwendet von jokeyrhyme schlägt er vor, die folgende script zu verwenden, um npm install innerhalb einer Docker-Instanz ausführen zu können. Ich kopiere den Code hier:

'use strict' 

// ideal for use with AWS Lambda and native Node.js modules 

// requires Docker: https://docs.docker.com/engine/installation/ 

/* 
Usage: 
    node docker-npm.js install 
    node docker-npm.js rebuild 
*/ 

const childProcess = require('child_process') 

const nodejsImage = 'node:4.3' 
const innerWorkingDir = '/src' 
const dockerArgs = [ 
    'run', '-i', 
    '-v', `${process.cwd()}:${innerWorkingDir}`, 
    '-w', innerWorkingDir, 
    nodejsImage, 'npm' 
] 
const npmArgs = process.argv.slice(2) 

const cp = childProcess.execFile(
    'docker', 
    dockerArgs.concat(npmArgs), 
    {}, 
    (err, stdout, stderr) => {} 
) 

cp.stderr.on('data', (data) => console.error(data)) 
cp.stdout.on('data', (data) => console.log(data)) 

cp.on('close', (code) => process.exit(code))