我有一个需要通过ssh与几台服务器通信的rails应用程序。我正在使用 Net :: SSH 库,效果很好。但是,我希望能够以某种方式在请求之间缓存/存储ssh连接(类似于OpenSSH复用)。
因此,我无法将它们存储在像
我不想将它们存储在会话中,因为它们应该被所有用户使用(此外我认为它也需要可序列化)。
我设法使用类变量和 initiliazer常量。我知道类变量不会在服务器之间复制(在生产中),而且我很确定初始化器常量也没有。类似的东西:
初始化:
SSH = {}
模型:
class Server
def connection
require 'net/ssh'
SSH[name] ||= Net::SSH.start(ip, "root", :password => password)
end
end
OpenSSH 多路复用会很棒,但我不确定我是否可以通过Net :: SSH ruby库(我回到某处存储主连接)。
还有其他解决方案吗?或者如果没有,哪一个是最不邪恶的呢?
答案 0 :(得分:1)
或许不是尝试在请求之间共享套接字,而这些请求最终会导致痛苦和痛苦,您可以委托给某种类型的后台处理器?您可以设置一个ssh隧道并使用DRb进行通信,就好像它只是一个本地网络守护程序,或任何大量联网的异步作业处理守护进程。
答案 1 :(得分:0)
要在请求之间保持SSH连接,您需要生成后台进程。后台进程可以打开一个管道或其他类型的interprocess communication method,即可以以可序列化的方式存储的句柄。
请注意,这是一项非常重要的练习,这就是为什么我只是在高级细节上进行描述。