現在の状況: N 個の遅延ジョブ ワーカーを含む Rails アプリがあります。マシンに SSH リクエストを送信するときはいつでも、ワーカー用のタスクを作成します。ワーカーは次のようなことを行います:
Net:SSH.start(hostname, username, :password => pass) do |ssh|
ssh.exec!(command)
end
時々、50 個のタスクを 1 つずつ、または 5 ~ 10 分以内に実行するように作成します。この場合、各タスクは個別の接続を開きますが、これは効果的ではなく、接続が多すぎるためにターゲット サーバーによってブロックされることがあります。
私が欲しいもの:どこかに保存され、各ワーカーによって再利用される接続を開きました。各ワーカーが何らかの方法で接続を取得してから実行するように
ssh.exec!(command)
私が試したこと:
- ファイル/データベース/キャッシュに接続を保存することは、シリアル化できないため不可能に見えます
- 初期化子の下でインスタンス化されたグローバル変数を持つシングルトン クラスを使用しようとしました。ただし、クラス オブジェクトはワーカーごとに異なります (後で、グローバル変数をオプションにできないことがわかりました)。
それを解決する方法はありますか?他のアイデアはありますか?ありがとう!!