Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby net ssh和ActiveRecord 3:将它们结合在一起_Ruby_Activerecord_Net Ssh - Fatal编程技术网

Ruby net ssh和ActiveRecord 3:将它们结合在一起

Ruby net ssh和ActiveRecord 3:将它们结合在一起,ruby,activerecord,net-ssh,Ruby,Activerecord,Net Ssh,我正在开发一个小型Ruby程序,它将连接到一个远程MySQL Bugzilla数据库,执行记录查询,并每天通过电子邮件将这些记录的详细信息发送给一个组 到目前为止,我已经能够通过SSH连接到db服务器并使用netssh执行命令。下面是一个例子: require 'net/ssh' Net::SSH.start("db.example.com", "sroach", :password => "secret") do |ssh| result = ssh.exec!("ls -l") pu

我正在开发一个小型Ruby程序,它将连接到一个远程MySQL Bugzilla数据库,执行记录查询,并每天通过电子邮件将这些记录的详细信息发送给一个组

到目前为止,我已经能够通过SSH连接到db服务器并使用netssh执行命令。下面是一个例子:

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,我想测试建立连接的方法,因此我建立了到本地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
但这一切只是让我的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
所以,我不知道出了什么问题,也不知道如何解决。任何和所有的建议都会有帮助


我在Mac OSX上。我尝试连接到的db位于FreeBSD 7.0上,是MySQL版本14.12发行版5.0.67。

您是否尝试过直接从ActiveRecord连接到db服务器,而不是尝试在SSH内通过隧道连接ActiveRecord?这是通过网络连接的正常方式,ActiveRecord直接支持这种方式

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


如果DB主机与您的主机不在同一网络上,并且您正在穿越防火墙,则可能需要打开该端口以允许连接。如果它在同一个网络上,它应该完全不需要ssh就可以工作。

您是否试图让mysql驱动程序通过ssh隧道进行通信?它可能与服务器相关。他们可能不允许从您的计算机、网络上的计算机进行连接,或者相反,只允许从特定计算机进行连接。您可能想问一下,这是一个新的姐妹站点,专门针对数据库管理员和高级用户进行堆栈溢出。
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