Frage

Ich habe eine Rails -App, die über SSH mit ein paar Servern kommunizieren muss. Ich benutze das NET :: SSH Bibliothek und es funktioniert großartig. Ich möchte jedoch in der Lage sein, die SSH -Verbindungen zwischen Anfragen (so etwas wie OpenSHSH -Multiplexing) zu speichern/zu speichern.

Also kann ich sie nicht in einem aufbewahren Schlüsselwert Wie Memcached oder Redis (weil SSH -Verbindungen nicht serialisierbar sind).

Ich möchte sie nicht in einem aufbewahren Sitzung Weil sie von allen Benutzern verwendet werden sollen (und außerdem denke ich, dass es auch serialisierbar sein muss).

Ich habe es geschafft, damit zu arbeiten Klassenvariablen und Initiliazer Konstanten. Ich weiß, dass Klassenvariablen nicht zwischen Servern (in der Produktion) replizieren, und ich bin mir ziemlich sicher, dass Initializer -Konstanten auch nicht tun. Etwas wie:

Initialisierer:

SSH = {}

Modell:

class Server
    def connection
        require 'net/ssh'
        SSH[name] ||= Net::SSH.start(ip, "root", :password => password)
    end
end

OpenSsh Multiplexing Wäre großartig, aber ich bin mir nicht sicher, ob ich das durch das Netz tun könnte :: SSH Ruby Library (ich bin wieder, um die Master -Verbindung irgendwo zu speichern).

Gibt es andere Lösungen? Oder wenn nicht, welches ist das am wenigsten böse von allen?

War es hilfreich?

Lösung

Vielleicht, anstatt zu versuchen, Sockets über Anfragen hinweg zu teilen, die am Ende Schmerzen und Leiden verursachen, könnten Sie einen Hintergrundprozessor delegieren? Sie können einen SSH -Tunnel einrichten und DRB verwenden, um darüber zu sprechen, als wäre es nur ein lokaler Netzwerk -Daemon oder eine der großen Anzahl vernetzter asynchroner Arbeitsplätze.

http://ruby-toolbox.com/categories/queueing.html

Andere Tipps

Um die SSH -Verbindung zwischen Anfragen aufrechtzuerhalten, müssen Sie einen Hintergrundprozess auswirken. Der Hintergrundprozess kann ein Rohr oder eine andere Art von anderen öffnen Interprozess -Kommunikationsmethode, der Griff, zu dem Sie kann auf Serialisierbare Weise aufbewahren.

Beachten Sie, dass dies eine nicht triviale Übung ist, weshalb ich sie nur bei hochrangigen Details beschrieben habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top