Der betreffende Code
%Vor%Dies gibt "nicht absolutes Zuhause" zurück. Der "Benutzer" hat tatsächlich ein Home-Verzeichnis. Ein vorgeschlagener Ansatz bestand darin, ~ / .ssh / config mit vollständigen Pfaden zum IdentityFile zu modifizieren. Dies hat das Problem nicht gelöst.
Der verrückte Teil ist, dass der Code gut funktioniert, wenn er über irb oder die Konsole aufgerufen wird. In dem Moment, in dem wir versuchen, es innerhalb einer Klassenmethode (mit demselben Code) aufzurufen, wird der Fehler "nicht absolute Heimat" zurückgegeben.
Der 'Benutzer' kann auch über die Befehlszeile ohne Probleme in den Server gelangen. Auf dem Server läuft Ubuntu.
AKTUALISIEREN
Danke an @Phrogz - Die Lösung dafür war, ENV ['HOME'] auf '/ home / deploy' zu setzen. Ich habe jedoch nicht herausgefunden, warum $ HOME auf "gesetzt" wird. auf dem Server. Also werde ich diese Frage ohne eine "Antwort" aufgeben, bis ich oder jemand anderes das herausgefunden habe. Das manuelle Festlegen von HOME fühlt sich eher wie ein "Hack" an als eine richtige Lösung, aber es funktioniert.
Wir sind gerade auf das gleiche Problem gestoßen und haben die Ursache gefunden. Wir führen unser Skript als Dienst aus und wenn Sie die Manpage für den Dienst überprüfen, werden die meisten env-Variablen vor dem Ausführen des Skripts, einschließlich HOME, entfernt. Ich weiß nicht, ob dein Szenario das gleiche ist, aber HOME ist nicht festgelegt.
net-ssh möchte ssh config im Home-Ordner des Benutzers nachsehen, so dass ENV ['HOME'] auf "." wenn es nicht festgelegt wurde. Aber wenn File.expand_path versucht, "~ / .ssh" zu erweitern, wird der ArgumentError ausgelöst.
Das wurde vor zwei Monaten behoben ( Ссылка ), damit Ihr net-ssh-Juwel aktualisiert wird sollte das beheben.
Es funktioniert definitiv, indem Sie die HOME env var setzen, wenn sie nicht gesetzt ist.
Linux legt diese Informationen basierend auf der /etc/passwd
-Datei fest.
Überprüfen Sie, was in /etc/passwd
für den deployer
Benutzer existiert. Es sollte nahe dem Ende der Liste sein.
Die Elemente sind durch Doppelpunkte getrennt. Der Wert für ENV['HOME']
sollte der vorletzte Eintrag in dieser Zeile sein.
Ist es leer, dh haben Sie zwei Doppelpunkte?
Ich vermute, dass Ihre HOME-Variable nicht in /etc/passwd
vorhanden ist und in einer der Standard-dotfiles gesetzt wird, also etwa so wie .bashrc
. Dann ist .bashrc
kurzgeschlossen, wenn Ihre App über ein init.d-Skript ausgeführt wird, das Ihre dotfiles nicht bereitstellt. (Viele .bashrc
-Dateien laden den Rest der Befehle nicht mehr, wenn sie über eine nicht interaktive Shell ausgeführt werden.)
Hoffe, das hilft und bitte posten Sie zurück mit Ihren Ergebnissen.
Tags und Links ruby ruby-on-rails-3 ubuntu-11.10 net-ssh