2013-04-04 7 views
52

Sto lavorando a un progetto nodejs per la scuola. Non ero in grado di installare bcrypt con npm, quindi ho installato bcrypt-nodejs e il progetto ha funzionato bene ieri. Ma oggi, quando faccio un "nodo di app" ho questo errore:bcrypt intestazione Elf non valida durante l'esecuzione dell'app nodo

/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79 
     throw e 
      ^
Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15) 
    at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 

mio file package.json assomiglia a questo:

{ 
    "name": "Supinfarm", 
    "version": "0.0.0", 
    "env": { 
       "PYTHON": "/usr/bin/python2.6" 
     }, 
    "dependencies": { 
    "express": "3.1.0", 
    "connect-flash": "*", 
    "jade": "*", 
    "stylus": "*", 
    "passport": "*", 
    "passport-local": "*", 
    "mongoose": "*", 
    "bcrypt": "*" 
    } 
} 

Sono su Linux Ubuntu 10.04 LTS I Ho provato a trovare una soluzione su google senza successo ... Qualcuno può aiutarmi?

+0

Hai trovato una soluzione? – MrYoshiji

+0

sì, ho installato Ubuntu 12.04 e sono stato in grado di installare e utilizzare bcrypt. grazie per l'interesse nel mio problema. – user2244469

risposta

98

Ho trovato che il bcrypt compilato su OSX non funzionerà abbastanza su Linux. In altre parole, se si esegue il check-in del bcrypt compilato sulla workstation OSX locale e si tenta di eseguire l'app del nodo sui server linux, verrà visualizzato l'errore sopra riportato.

Soluzione: npm install bcrypt su Linux, verificarlo, risolto.

Probabilmente il modo migliore per gestire questo è escludere i tuoi node_modules in .gitignore ... e npm install in remoto.

+1

Questo perché sono diversi sistemi operativi e, molto probabilmente, diverse architetture di processore sottostanti. Quando ero al college avevamo due cluster UNIX: uno in esecuzione su un VAX e l'altro su un Alpha. I progetti CS sono stati compilati sul VAX poiché è quello che il professore ha usato ... – tkone

+0

@tkone Sure, ma i moduli npm cross-compilano: l'installazione di qualcosa con un componente binario ti dà un Mach (OS X), ELF (Linux) e Binario PXE (Windows). – mikemaccana

+1

L'unico problema è: bcrypt, a differenza di altri moduli nodo, installa solo un singolo binario del SO. Quindi ** commettere un bcrypt installato su Linux interromperà i sistemi per sviluppatori Mac **, dal momento che node_modules/bcrypt/build/Release/bcrypt_lib.node ora è un binario Linux. Esegui 'file/Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node' per testare. – mikemaccana