Pregunta

Tengo un raíles de aplicación que necesita para comunicarse con un par de servidores a través de ssh. Estoy usando el Net :: SSH biblioteca y funciona muy bien. Sin embargo me gustaría ser capaz de caché / almacenar las conexiones ssh alguna manera entre las solicitudes (algo así como OpenSSH Multiplexing).

Por lo tanto, no puedo guardarlos en un clave-valor tienda como Memcached o Redis (porque las conexiones ssh no son serializable).

Yo no quiero guardarlos en un sesión , ya que están destinados a ser utilizados por todos los usuarios (y además creo que tiene que ser serializable también).

Me las arreglé para conseguir este trabajo con variables de la clase y initiliazer constantes . Sé que las variables de clase no se replican entre los servidores (en la producción), y estoy bastante ciertas constantes de inicializador también no lo hacen. Algo así como:

inicializador:

SSH = {}

modelo:

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

OpenSSH multiplexación sería grande pero no estoy seguro de si podría hacerlo a través de la biblioteca Net :: SSH rubí (estoy de vuelta a algún lugar de almacenar la conexión maestro).

¿Hay otras soluciones? O si no, ¿cuál es el menos malo de todos ellos?

¿Fue útil?

Solución

Tal vez en lugar de tratar a los sockets compartir a través de peticiones que está obligado a llegar a causar dolor y el sufrimiento que podría delegar en un procesador de fondo de algún tipo? Se podría establecer un túnel SSH y utilizar DRB al hablar a través de ella como si fuera sólo un demonio de red local, o cualquiera de la gran cantidad de demonios de Gestión de trabajos asíncronos conectados en red.

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

Otros consejos

Para mantener la conexión SSH entre peticiones, que necesita para desovar fuera un proceso de fondo. El proceso en segundo plano puede abrir una tubería o algún otro tipo de entre procesos método de comunicación , el mango a la que puede tienda de una manera serializable.

Tenga en cuenta que este es un ejercicio trivial, que es por eso que sólo he descrito en detalle alto nivel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top