Ich habe ein Problem mit npm install
von einem Koch Rezept ausgeführt. Wenn ich es über die Befehlszeile ausführe, ist es in weniger als einer Minute mit ein paar Warnungen in Bezug auf package.json no repository field (die harmlos sein sollte) beendet. Aber wenn ich es vom Chef laufen, hängt es mit der letzten Zeile Ausgang zurück in die Befehlszeile wie folgt aus:Chef-Client hängt an Npm installieren bei Node-Gyp-Umbau
* execute[npm-install-app] action run
Welche dieser Ressourcenblock im Rezept ist:
execute "npm-install-app" do
cwd "#{home}/#{prefix}#{app}"
command "npm --registry #{priv['url']}:#{priv['port']}#{priv['path']} install --cache #{home}/.npm --tmp #{home}/tmp > npm-run.log 2>&1"
user node['nodejs']['user']
action :run
end
Wo #{home}
erweitert out zu /home/nodejs
und der Benutzer ist nodejs
.
Wie Sie sehen können, leitete ich die Ausgabe in eine Datei in eine Datei mit > npm-run.log 2>&1
um. Die Ausgabedatei wird die Ausgabe des NPM installiert Befehl geschrieben (im Gegensatz zu der Befehlszeile), und das letzte, was durchkommt, ist dies:
-- a bunch of 200's and 304s, like this --
npm http 304 http://my.private.npm.amazonaws.com/registry/_design/app/_rewrite/esprima
[email protected] install /home/nodejs/my-app/node_modules/mongoose-q/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
(node-gyp rebuild 2> builderror.log) || (exit 0)
kerberos
ist eine Abhängigkeit von einem Modul angewiesen sind wir auf , aber wir benutzen Kerberos nicht selbst. Ich entnehme anderen Quellen, dass npm node-gyp ausführt, um eine Version der App zu kompilieren, die nicht auf dem npm-Server verfügbar ist.
Es wird in diesem Zustand für 2 Stunden sitzen, bis chef shellout ein Timeout registriert und es einen schwerwiegenden Fehler zeigt. ps -e
zeigt an, dass npm noch läuft, wenn der chef-client noch läuft, und die Unterbrechung des chef-clients führt dazu, dass npm aus der Prozessliste verschwindet, was nahelegt, dass npm immer noch denkt, dass es zumindest noch sinnvolle Arbeit leistet. (Nebenbei bemerkt, während ich Verbindungsprobleme hatte, war ich geneigt, this question zu fragen. Es gibt ein hohes Maß an Wahrscheinlichkeit, dass dieses npm install
das zugrundeliegende Problem der anderen Frage ist, aber ich denke, dass sie separate Betrachtung rechtfertigen.)
Edit: mit einem -l debug
der Koch-Client-Laufe fügt eine kleine Menge von Informationen an die /var/log/chef/client.log
-Datei, die bestätigt im Wesentlichen, dass der npm install
Befehl die letzte Ressource vor hanging ausgeführt werden soll:
[2014-01-09T22:49:28+00:00] INFO: Processing execute[npm-install-app] action run (my-app::default line 111)
[2014-01-09T22:49:28+00:00] DEBUG: Platform ubuntu version 12.04 found
Am Ich denke, dass das || (Ausgang 0) wirft den Chef ShellOut Anbieter einen erfolgreichen Ausgang zu erkennen? Kann ich irgendetwas dagegen tun?
Edit 2: Chef zeitlich nur mit -l debug
Satz von einem Lauf aus, und bekam nur noch Informationen über die Timeout anmelden.
[2014-01-10T00:26:56+00:00] ERROR: execute[npm-install-app] (my-app::default line 111) had an error: Mixlib::ShellOut::CommandTimeout: command timed out:
---- Begin output of npm --registry http:my.private.npm.amazonaws.com:5984/registry/_design/app/_rewrite install --cache /home/nodejs/.npm --tmp /home/nodejs/tmp > npm-run.log 2>&1 ----
STDOUT:
STDERR:
---- End output of npm --registry http://ec2-54-221-190-191.compute-1.amazonaws.com:5984/registry/_design/app/_rewrite install --cache /home/nodejs/.npm --tmp /home/nodejs/tmp > npm-run.log 2>&1 ----
Aber! Ein weiterer Knoten nur erfolgreich nach ca. 5 Minuten beendet und hatte diesen Inhalt in der Datei npm-run.log
:
> [email protected] install /home/nodejs/spicoli-authorization/node_modules/mongoose-q/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)
make: Entering directory `/home/nodejs/spicoli-authorization/node_modules/mongoose-q/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build'
SOLINK_MODULE(target) Release/obj.target/kerberos.node
SOLINK_MODULE(target) Release/obj.target/kerberos.node: Finished
COPY Release/kerberos.node
make: Leaving directory `/home/nodejs/spicoli-authorization/node_modules/mongoose-q/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build'
ich nicht denken kann, warum es wäre ein so großer Performance-Unterschied, beiden Server laufen auf amazon kleine EC2-Instanzen . Vielleicht gibt es einen Unterschied der Berechtigungen zwischen dem Home-Verzeichnis auf den funktionierenden und defekten Servern ... Ich werde diesen Winkel untersuchen.
Haben Sie eine Lösung zu finden? Ich sehe nichts unmittelbar Offensichtliches, das dies verursachen würde. – sethvargo
@sethvargo Ich habe noch keine Fortschritte gemacht. Ich versuche gerade einen Weg zu finden, mehr Logs aus dem 'node-gyp rebuild' Prozess zu erfassen, aber [ihre Dokumentation] (https://github.com/TooTallNate/node-gyp) erwähnt nichts darüber. Ich muss vielleicht zum Quellcode-Tauchen gehen oder eine Alias-Magie ausprobieren. –