【发布时间】:2014-01-01 17:15:05
【问题描述】:
现状: 我有一个带有 N 个延迟工作人员的 Rails 应用程序。每当我想向某台机器发送 SSH 请求时,我都会为工作人员创建一个任务。 Worker 执行如下操作:
Net:SSH.start(hostname, username, :password => pass) do |ssh|
ssh.exec!(command)
end
有时我会创建例如50 个这样的任务要一个一个地执行,或者在 5-10 分钟内完成。在这种情况下,每个任务都打开单独的连接,这并不有效,有时会因为连接太多而被目标服务器阻塞。
我想要什么:已打开的连接存储在某处并被每个工作人员重用。这样每个工人都以某种方式获得连接,然后运行
ssh.exec!(command)
我的尝试:
- 在文件/数据库/缓存中存储连接似乎是不可能的,因为它们不可序列化
- 已尝试将单例类与在初始化程序下实例化的全局变量一起使用。但是每个worker的类对象是不同的(后来发现不能选择全局变量)。
有没有办法解决这个问题?还有其他想法吗?谢谢!!
【问题讨论】:
-
您的任务是保留了一段时间,还是只是在同步 SSH 任务?
-
任务实际上并没有延迟,而更像是排队。例如,有一个操作 A,在此期间执行一堆 ssh 命令,然后是任务 B(5-10 分钟),然后是任务 C(再次 ssh 请求)
标签: ruby-on-rails ruby delayed-job net-ssh