Question

J'ai rails application qui a besoin de communiquer avec un couple de serveurs ssh. J'utilise le Net :: SSH bibliothèque et il fonctionne très bien. Je voudrais cependant pouvoir cache / stocker les connexions ssh en quelque sorte entre les requêtes (quelque chose comme le multiplexage OpenSSH).

Alors, je ne peux pas les stocker dans un magasin valeur clé comme Memcached ou Redis (car les connexions SSH ne sont pas sérialisables).

Je ne veux pas les stocker dans un Session parce qu'ils sont destinés à être utilisés par tous les utilisateurs (et d'ailleurs je pense qu'il doit être sérialisable aussi).

J'ai réussi à obtenir ce travail avec variables de classe et initiliazer constantes . Je sais que les variables de classe ne se répliquent pas entre les serveurs (en production), et je suis assez certaines constantes de initialiseur font pas non plus. Quelque chose comme:

initialiseur:

SSH = {}

modèle:

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

OpenSSH multiplexage serait génial, mais je ne suis pas sûr si je pouvais le faire à travers la bibliothèque Ruby Net :: SSH (je suis de retour pour le stockage de la part de connexion maître).

Y at-il d'autres solutions? Ou sinon, que l'on est le moins mauvais de tous?

Était-ce utile?

La solution

Peut-être plutôt que d'essayer de prises d'actions à travers des demandes qui est lié à finir par causer la douleur et la souffrance que vous pourriez déléguer à un processeur de fond de quelque sorte? Vous pouvez configurer un tunnel ssh et utiliser DRb pour parler à travers elle comme si elle était juste un démon réseau local, ou l'un des grand nombre de daemons manutention d'emploi asynchrones en réseau.

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

Autres conseils

Pour garder la connexion SSH entre les demandes, vous devrez frayer déclencher un processus d'arrière-plan. Le processus d'arrière-plan peut ouvrir un tuyau ou d'une autre sorte de interprocessus procédé de communication , la poignée auquel vous peut magasin de manière sérialisable.

Notez que ceci est un exercice non trivial, ce qui est la raison pour laquelle je ne l'ai décrit en détail à ce haut niveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top