Domanda

Ho un applicazione Rails che deve comunicare con un paio di server attraverso ssh. Sto utilizzando il Net :: SSH biblioteca e funziona benissimo. Vorrei però essere in grado di cache / memorizzare le connessioni ssh in qualche modo tra le richieste (si parla di OpenSSH Multiplexing).

Quindi, non posso conservarle in un negozio di chiave-valore come Memcached o Redis (perché le connessioni ssh non sono serializzabile).

Non voglio per memorizzarli in un sessione , perché sono destinati ad essere utilizzati da tutti gli utenti (e inoltre penso che deve essere serializzabile anche).

Sono riuscito ad ottenere questo lavoro con le variabili class e initiliazer costanti . So che le variabili di classe non si replicano tra i server (in produzione), e sono abbastanza alcune costanti di inizializzazione anche non lo fanno. Qualcosa di simile:

initializer:

SSH = {}

modello:

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

OpenSSH multiplexing sarebbe bello, ma non sono sicuro se potessi farlo tramite la libreria Net :: SSH rubino (io sono di nuovo a memorizzare il posto di connessione master).

Ci sono altre soluzioni? O se no, quale è il minimo male di tutti?

È stato utile?

Soluzione

Forse, piuttosto che cercare di prese di condivisione tra le richieste, che è destinata a finire per causare dolore e la sofferenza si può delegare ad uno sfondo processore di qualche tipo? Si potrebbe impostare un tunnel ssh e utilizzare DRB a parlare attraverso di esso come se fosse solo un demone rete locale, o una qualsiasi delle gran numero di demoni la gestione del lavoro asincroni in rete.

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

Altri suggerimenti

Per mantenere la connessione SSH tra le richieste, è necessario per deporre le uova fuori un processo in background. Il processo di sfondo può aprire un tubo o qualche altro tipo di interprocesso metodo di comunicazione , la maniglia a cui si possono negozio in modo serializzabile.

Si noti che questo è un esercizio non banale, che è il motivo per cui ho solo descritto è a dettaglio di alto livello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top