2011-02-05 41 views
0

我正在研究一个小型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。

+0

你想让你的MySQL驱动程序通过SSH隧道进行通信? – 2011-02-06 01:04:20

回答

0

与其尝试在SSH内隧道连接ActiveRecord连接,是否尝试过直接从ActiveRecord连接到数据库服务器?这是通过网络连接的正常方式,并且直接由ActiveRecord支持。

将主机ID替换为服务器主机IP或DNS条目,可能允许该端口默认为MySQL驱动程序的默认值3306,并且由于数据库位于远程主机上,因此不需要套接字。

如果数据库主机与您的网络不在同一网络中,并且您穿过防火墙,则可能需要打开该端口以允许连接。如果它在同一个网络上,它应该工作而不需要ssh。

+0

它可能与服务器有关。他们可能不允许来自您的机器,网络上的机器的连接,或者相反,只允许来自特定机器的连接。 – 2011-02-06 06:33:55

相关问题