私のoracle dbは、ジャンプオフ・サーバ経由でのみアクセス可能であり、負荷分散されています。その結果、私はbashで、次のバックグラウンドトンネルコマンドを実行します。ルビーでバックグラウンドsshトンネルを作成する
ssh ${jumpoffUser}@${jumpoffIp} -L1521:ont-db01-vip:1521 -L1522:ont-db02-vip:1521 -fN
私はそうのようなSQLPLUSを使用してDBに私のコマンドを実行する前に:
sqlplus #{@sqlUsername}/#{@sqlPassword}@'#{@sqlUrl}' @scripts/populateASDB.sql
このすべてが正常に動作します。
私はこの手順をrubisizeしたいと思います。
ルビーのドキュメントを調べると、バックグラウンドにトンネルを配置する方法が見つかりませんでしたが(私の好みになります)、上記のトンネルとその後のsqlplusコマンドをエミュレートすると思われるローカルポート転送のドキュメントが見つかりました。ここで
は私のコードです:
Net::SSH.start(@jumpoffIp, @jumpoffUser) do |session|
session.forward.local(1521, 'ont-db01-vip', 1521)
session.forward.local(1522, 'ont-db02-vip', 1521)
puts "About to populateDB"
res = %x[sqlplus #{@sqlUsername}/#{@sqlPassword}@'#{@sqlUrl}' @scripts/populateASDB.sql > output.txt]
puts "populateDb output #{res}"
session.loop
end
私は上記を実行すると、私は「populateDBにについて」行を取得しますが、SQLPLUSコマンドの実走行にハングアップします。私のポート転送コードに何か問題がありますか?次のように入力してください:
ssh ${jumpoffUser}@${jumpoffIp} -L1521:ont-db01-vip:1521 -L1522:ont-db02-vip:1521 -fN
ルビーコードには?
https://net-ssh.github.io/ssh/v1/chapter-4.html#s1 whyなぜあなたは_running ruby process_のサブシェルで実行するコマンドがあなたのSSHトンネルを認識していると思いますか?ちょうど確立された? – mudasobwa
トンネルは、私のマシン上のポートを、jumpoffを通じてトンネル経由でdbサーバ上のポートにバインドする必要があります。これはbashで動作します。 localhost:1521への呼び出しは一見ont-db01-vip:1521になり、localhost:1522への呼び出しは一見ont-db02-vipになります:1521 – amadain
サブシェルはポートバインディング – amadain