我正在研究一个小型Ruby程序,它将连接到远程MySQL Bugzilla数据库,执行记录查询以及将这些记录的详细信息发送给每日。net-ssh和ActiveRecord 3:将它们放在一起
到目前为止,我已经能够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
所以,我不知道发生了什么错误或如何degub它。任何和所有的建议将会有所帮助。
我在Mac OSX上。我尝试连接的数据库在FreeBSD 7.0上,并且是MySQL版本Ver 14.12 Distrib 5.0.67。
你想让你的MySQL驱动程序通过SSH隧道进行通信? – 2011-02-06 01:04:20