ssh を介していくつかのサーバーと通信する必要がある Rails アプリがあります。私はNet::SSHライブラリを使用していますが、うまく機能します。ただし、リクエスト間で何らかの方法でssh接続をキャッシュ/保存できるようにしたいと思います(OpenSSHの多重化など)。
そのため、 Memcached や Redis などのキー値ストアにそれらを格納することはできません(ssh 接続はシリアル化できないため)。
それらはすべてのユーザーが使用することを意図しているため、セッションに保存したくありません(さらに、シリアライズ可能である必要があると思います)。
クラス変数と初期化定数を使用してこれを機能させることができました。クラス変数がサーバー間で (本番環境で) 複製されないことはわかっています。また、初期化子定数も複製されないことは確かです。何かのようなもの:
初期化子:
SSH = {}
モデル:
class Server
def connection
require 'net/ssh'
SSH[name] ||= Net::SSH.start(ip, "root", :password => password)
end
end
OpenSSHの多重化は素晴らしいことですが、Net::SSH ruby ライブラリを介してそれを行うことができるかどうかはわかりません (マスター接続をどこかに保存することに戻りました)。
他の解決策はありますか?または、そうでない場合、それらすべての中で最も悪が少ないのはどれですか?