2012-11-10 14 views
11

Sto provando a schierare un semplice node.js Express-based a Heroku, qualcosa che è apparentemente molto semplice: https://devcenter.heroku.com/articles/nodejsFail per distribuire applicazioni node.js di Heroku

ecco la mia package.json:

{ 
    "name": "cours-lic3-blois", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app" 
    }, 
    "dependencies": { 
    "express": "*", 
    "ejs": "*", 
    "github-flavored-markdown": "*", 
    "less-middleware": "*" 
    }, 
    "engines": { 
    "node": "0.8.8", 
    "npm": "1.1.65" 
    } 
} 

Quando ho git push heroku master ho ricevuto la seguente traccia:

-----> Heroku receiving push 
-----> Node.js app detected 
-----> Resolving engine versions 
     Using Node.js version: 0.8.8 
     Using npm version: 1.1.65 
-----> Fetching Node.js binaries 
-----> Vendoring node into slug 
-----> Installing dependencies with npm 
     npm ERR! Error: ENOENT, chmod '/tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express' 
     npm ERR! If you need help, you may report this log at: 
     npm ERR!  <http://github.com/isaacs/npm/issues> 
     npm ERR! or email it to: 
     npm ERR!  <[email protected]> 

     npm ERR! System Linux 2.6.32-348-ec2 
     npm ERR! command "/tmp/node-node-tonf/bin/node" "/tmp/node-npm-NG88/cli.js" "rebuild" 
     npm ERR! cwd /tmp/build_1suuxlhd9s8n6 
     npm ERR! node -v v0.8.8 
     npm ERR! npm -v 1.1.65 
     npm ERR! path /tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express 
     npm ERR! code ENOENT 
     npm ERR! errno 34 
     npm ERR! 
     npm ERR! Additional logging details can be found in: 
     npm ERR!  /tmp/build_1suuxlhd9s8n6/npm-debug.log 
     npm ERR! not ok code 0 
    !  Failed to rebuild dependencies with npm 
    !  Heroku push rejected, failed to compile Node.js app 

To [email protected]:fast-everglades-2007.git 
    ! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]:fast-everglades-2007.git' 

ho cercato di ottimizzare le varie versioni della mia package.json ma senza alcun risultato. Sto sviluppando su Windows e potrebbe essere possibile che questo problema di ENOENT sia dovuto a qualche problema di filemode.

+0

Riprovare. Il repository npm getta questi errori a volte anche quando si esegue da un ambiente locale – almypal

+1

Ho provato più volte di seguito è per questo che ho posto la domanda. Riprova ... – insitu

risposta

16

ho ottenuto questo riparato da:

  • Assicurandosi Procfile si impegna in git

  • Rimozione del node_modules/cartella e commettere che in Git (git rm -r node_modules /)

Successivamente, ho fatto il push del mago di heroku quindi l'errore è scomparso.

+5

Questo lo ha risolto per me e aggiungendo node_modules/a .gitignore –

+1

+1 a Arbie, +1 a @WindUpToy – CjCoax

+0

Questo ha funzionato per me. Dovevo anche eseguire "npm install -g express-generator" ed eseguire "express". per creare un file package.json –

9

Ho avuto questo problema, ed è stato perché:

  1. io continuo node_modules nel controllo di versione
  2. ho avuto bin nel mio file .gitignore

npm stava tentando di chmod express/bin/express, ma a causa del mio .gitignore questo file non era in git e quindi non veniva clonato durante la distribuzione, quindi fallito. Non l'ho notato perché una installazione locale npm creerebbe il file bin/express come al solito.

La rimozione di bin da .gitignore e il commit dei file mancanti ha risolto il problema per me.

+1

Per me era che avevo * node_modules * in .gitignore. – Henrik

3

Team di Heroku, potresti considerare la configurazione di npm per utilizzare npm install --no-bin-links --production per impostazione predefinita o la creazione di una variabile di ambiente per consentire agli utenti di impostare tale contrassegno. Questo è un bug grave nelle installazioni dei nodi. La rimozione della directory bin dal mio .gitignore (come suggerito di seguito) mi ha permesso di implementare, ma si rompe usando git in modo efficace in un ambiente di sviluppo multipiattaforma, richiedendo una ricostruzione esplicita di npm su ogni pull git in cui node_modules potrebbe essere cambiato.

NP è consigliabile evitare di avere node_modules in .gitignore (vedere http://www.futurealoof.com/posts/nodemodules-in-git.html).

Credo che --no-bin-links fornirà il meglio di entrambi i mondi, abilitando i deployment di node_modules in cui la directory bin è stata esclusa, supportando la ricostruzione di npm, ma non fallendo quando viene creato un collegamento bin.

ho presentato una richiesta di pull qui: https://github.com/heroku/heroku-buildpack-nodejs/pull/33

Grazie!

+0

Is -no-bin-links aiuta davvero? Sto sperimentando con il check in node_modules in git (escludendo le cartelle bin) e sto correndo nello stesso problema anche localmente (eventualmente voglio distribuire su beanstalk) –

0

problema simile è stato risolto rinominando gruntfile.js in Gruntfile.js

Problemi correlati