wake-up-neo.com

Verwenden Sie Git-Abhängigkeiten mit npm und Node auf Heroku

Ich habe diese package.json-Datei:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "git://github.com/juggy/jugglingdb.git#master"
    , "nodemailer": "0.2.3"
  }
}

und ich möchte mich bei Heroku einsetzen. Es funktioniert lokal gut mit der npm-Version 1.0.105, aber es verschluckt sich auf Heroku (ich habe die npm dort auch auf 1.0.105 aktualisiert):

   -----> Heroku receiving Push
   -----> Fetching custom build pack... done
   -----> Node.js app detected
   -----> Fetching Node.js binaries
   -----> Vendoring node 0.4.7
   -----> Installing dependencies with npm 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! Error: `git "checkout" "master"` failed with 128
          npm ERR!     at ChildProcess.<anonymous> (/tmp/node-npm-Jb2d/lib/utils/exec.js:49:20)
          npm ERR!     at ChildProcess.emit (events.js:67:17)
          npm ERR!     at ChildProcess.onexit (child_process.js:192:12)
          npm ERR! Report this *entire* log at:
          npm ERR!     <http://github.com/isaacs/npm/issues>
          npm ERR! or email it to:
          npm ERR!     <[email protected]>
          npm ERR! 
          npm ERR! System Linux 2.6.32-316-ec2
          npm ERR! command "/tmp/node-node-C3jD/bin/node" "/tmp/node-npm-Jb2d/cli.js" "install"
          npm ERR! cwd /tmp/build_2yzg7lk83o5m9
          npm ERR! node -v v0.4.7
          npm ERR! npm -v 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! 
          npm ERR! Additional logging details can be found in:
          npm ERR!     /tmp/build_2yzg7lk83o5m9/npm-debug.log
          npm not ok
    !     Failed to install dependencies with npm
    !     Heroku Push rejected, failed to compile Node.js app 

Ich scheine auch keinen Weg zu finden, um auf diese Protokolldatei in/tmp zuzugreifen.

Wie gelingt es jedem, eine Git-Abhängigkeit von Heroku bereitzustellen (funktioniert auf Ruby-Seite gut: P)?

30
Julien

Das Problem liegt in ihrem Nodejs-Buildpack. Ich habe eine Pull-Anfrage mit einem Fix an Heroku gesendet, habe aber keine Ahnung, ob oder wann sie antworten werden. Glücklicherweise gibt es eine nicht sehr gut dokumentierte Methode für die Verwendung eines benutzerdefinierten Buildpacks, mit der Sie das Problem umgehen können. Ich habe herokus nodejs buildpack gegabelt und das Problem behoben - hier verfügbar:

https://github.com/chrisleishman/heroku-buildpack-nodejs/tree/git_fix

Um dies zu nutzen, erstellen Sie am besten Ihren eigenen github-Zweig von https://github.com/heroku/heroku-buildpack-nodejs und fügen Sie ihn dann in meinem chrisleishman/git_fix-Zweig zusammen. Z.B. (nach dem Gabeln):

git clone [email protected]:@[email protected]/heroku-buildpack-nodejs.git
cd heroku-buildpack-nodejs
git remote add chrisleishman git://github.com/chrisleishman/heroku-buildpack-nodejs.git
git fetch chrisleishman
git merge chrisleishman/git_fix
git Push

Sie können dann die BUILDPACK_URL config-Variable zu Ihrer Heroku-App hinzufügen. Z.B.

heroku config:add BUILDPACK_URL="git://github.com/@[email protected]/heroku-buildpack-nodejs.git

Das nächste Push to Heroku sollte dann das benutzerdefinierte Buildpack verwenden, das den Fix enthält.

12
Chris Leishman

Zu Ihrer Information, wenn es auf GitHub ist, können Sie einfach den username/repository angeben und npm erledigt den Rest.

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "juggy/jugglingdb"
    , "nodemailer": "0.2.3"
  }
}

Alternative

Geben Sie eine der folgenden Adressen (git/git+ssh/git+http/git+https) ://[email protected]/repo.git an

Vollständig dokumentiert

78
code ninja

Ich weiß nichts über dieses Paket, aber ich habe andere, die mit der folgenden Syntax arbeiten. Auf Heroku mit einem http-Verweis auf ein tar.gz

package.json:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "https://github.com/juggy/jugglingdb/tarball/master"
    , "nodemailer": "0.2.3"
  }
}
35

Beachten Sie, dass Sie commit-ish angeben können, um auszuwählen, welches Commit/branch/... Sie installieren möchten, in der Form "user/foo-project#commit-ish", siehe doc .

Ein Beispiel: 

"dependencies": {
    "express": "visionmedia/express#some-branch",
    "mocha": "visionmedia/mocha#4727d357ea"
}
3
laike9m

Ich bin nicht sicher, ob es sich um dasselbe Problem zu diesem Datum handelt, aber es ist eine Fehlermeldung aufgetreten, die die gleiche war. Ich konnte das Problem lösen, indem ich explizit die Version des Knotens und die Anzahl der Seiten pro Minute angibt:

https://devcenter.heroku.com/articles/nodejs-versions

2
prototype

Ich hatte ein ähnliches Problem, außer dass ich mich auf ein privates Git-Repo bezog. Meine Lösung dafür war, ein postinstall-Skript für Folgendes hinzuzufügen:

{
    "postinstall": "npm update && npm install package-name"
}

Durch die Aktualisierung und Installation wird das private Repo von npm auf den neuesten Stand gebracht. ( https://github.com/npm/npm/issues/1727 )

1
wlingke

Wenn jemand mit npm 5+ Probleme hat (wobei package-lock.json eine Sache ist), stellen Sie sicher, dass Sie das Paket über die Befehlszeile installieren.

npm i my_package --save https://github.com/username/repo/archive/v6.5.2.tar.gz

Ab NPM 5.0.3 wird das einfache Hinzufügen zu package.json und Ausführen von npm i nicht aktualisiert. package-lock.json (grrr). 

0
rguerrettaz