J'ai ce fichier 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": "git://github.com/juggy/jugglingdb.git#master"
, "nodemailer": "0.2.3"
}
}
et je veux me déployer à Heroku. Cela fonctionne bien localement avec npm version 1.0.105, mais cela étouffe Heroku (j’ai mis à jour le npm à 1.0.105 également):
-----> 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
De plus, je ne semble pas trouver un moyen d'obtenir l'accès à ce fichier journal dans/tmp.
Si quelqu'un réussit à déployer une dépendance de Git sur Heroku (fonctionne bien du côté de Ruby: P)?
Le problème est dans leur buildpack nodejs. J'ai envoyé une demande de retrait à Heroku avec un correctif, mais je ne sais pas si ou quand ils répondront. Heureusement, il existe une méthode pas très bien documentée pour utiliser un buildpack personnalisé, qui vous permettra de contourner le problème. J'ai brouillé le buildpack de nodejs de heroku et résolu le problème - disponible ici:
https://github.com/chrisleishman/heroku-buildpack-nodejs/tree/git_fix
Pour utiliser cela, vous feriez mieux de créer votre propre fork de github de https://github.com/heroku/heroku-buildpack-nodejs puis de fusionner dans ma branche chrisleishman/git_fix
. Par exemple. (après avoir bifurqué):
git clone [email protected]:@YOUR-GITHUB-NAME@/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
Vous pouvez ensuite ajouter la variable BUILDPACK_URL
config à votre application heroku. Par exemple.
heroku config:add BUILDPACK_URL="git://github.com/@YOUR-GITHUB-NAME@/heroku-buildpack-nodejs.git
Le prochain envoi à heroku doit ensuite utiliser le buildpack personnalisé, contenant le correctif.
Pour info si c'est sur GitHub, vous pouvez simplement spécifier le username/repository
et npm fera le reste.
{
"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"
}
}
Spécifiez l'une des (git
/git+ssh
/git+http
/git+https
) ://user@Host/repo.git
urls
Complètement documenté
Je ne connais pas ce paquet, mais j'en ai d'autres avec une syntaxe comme celle-ci. Sur heroku, en utilisant une référence http à un 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"
}
}
Notez que vous pouvez spécifier commit-ish pour sélectionner la validation/branche/... à installer, sous la forme "user/foo-project#commit-ish"
, voir doc .
Un exemple:
"dependencies": {
"express": "visionmedia/express#some-branch",
"mocha": "visionmedia/mocha#4727d357ea"
}
Pas sûr que ce soit le même problème à cette date, mais j'ai eu un message d'erreur identique, et j'ai trouvé que je pouvais le résoudre en spécifiant explicitement la version de node et npm sur cette page:
J'ai eu un problème similaire, sauf que je faisais référence à un dépôt privé git. Ma solution pour cela consistait à ajouter un script postinstall
pour les éléments suivants:
{
"postinstall": "npm update && npm install package-name"
}
La mise à jour et l’installation permettent à npm de mettre à jour le dépôt privé au plus tard. ( https://github.com/npm/npm/issues/1727 )
Si vous avez des problèmes avec npm 5+ (où package-lock.json
est une chose), assurez-vous d’installer le paquet via la ligne de commande.
npm i my_package --save https://github.com/username/repo/archive/v6.5.2.tar.gz
À partir de NPM 5.0.3, il suffit de l'ajouter à package.json
et d'exécuter npm i
ne mettra pas à jour package-lock.json
(grrr).