私は、リモートのMySQL Bugzillaデータベースに接続し、レコードのクエリを実行し、それらのレコードの詳細をグループに毎日電子メールで送信する小さなRubyプログラムに取り組んでいます。
これまでのところ、dbサーバーにSSHで接続し、net-sshを使用してコマンドを実行することができました。次に例を示します。
require 'net/ssh'
Net::SSH.start("db.example.com", "sroach", :password => "secret") do |ssh|
result = ssh.exec!("ls -l")
puts result
end
それはうまく出力します。
ActiveRecord 3.0.3を使用してメソッドをテストしたかったestablish_connection
ので、ローカルのMySQLデータベースへの接続を確立し、ActiveRecordを使用してコマンドを実行できました。例:
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:database => "list_tool_development",
:username => "my_username",
:password => "secretpassword"
)
class MailingList < ActiveRecord::Base
end
MailingList.first #=> Successfully retrieves first record from the table
だから、私が問題を抱えているのは、それをすべてまとめて、リモートのMySQLデータベースに適用することです。これまでの私の最善の試みは次のとおりです。
require 'net/ssh'
Net::SSH.start("db.example.com", "sroach", :password => "secret") do |ssh|
ssh.forward.local(3307, "127.0.0.1", 3306)
ssh.loop { true }
end
しかし、それは私のIRBセッションをハングさせることだけです(これは完全に正常である可能性があります...わかりません)。ハングが正常であった場合は、新しいIRBセッションを開き、次のようにリモートデータベースへの接続を確立しようとしました。
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "127.0.0.1",
:port => 3307,
:reconnect => false,
:database => "bugs",
:pool => 5,
:username => "my_username",
:password => "secret",
:socket => "/tmp/mysql.sock"
)
class Bug < ActiveRecord::Base #=> the table name in the "bugs" db is "bugs"
end #=> so I made the model singular
Bug.first #=> the IRB session hangs at this point
だから、私は何が間違っているのか、それをどのようにデグブするのか分かりません。ありとあらゆる提案が役に立ちます。
私はMacOSXを使用しています。私が接続しようとしているデータベースはFreeBSD7.0にあり、MySQLバージョンVer 14.12Distrib5.0.67です。