ruby-on-rails - 无法使用 ssh 隧道和 activerecord 连接到远程数据库

标签 ruby-on-rails ruby activerecord ssh

我在使用以下脚本时遇到了一些问题:

require 'rubygems'
require 'active_record'
require 'net/ssh/gateway'

gateway = Net::SSH::Gateway.new('myserver.com', 'myuser', :password => "mypass")
puts "true" if gateway.active?
p = gateway.open('127.0.0.1', 3306, 3307)

class MyClass < ActiveRecord::Base
  establish_connection(
    :adapter  => "mysql",
    :host     => "127.0.0.1",
    :username => "db_user",
    :password => "db_pass",
    :database => "mydb_production",
    :port     => 3307
  )
end

puts MyClass.all.size

gateway.shutdown!

当我运行脚本时它只是挂起,除非我删除 activerecord 查询。我知道我可以使用隧道连接,因为我可以像这样从命令创建隧道:

ssh -f myuser@myserver.com -L 3307/127.0.0.1/3306 -N

然后如果我运行:

require 'rubygems'
require 'active_record'

class MyClass < ActiveRecord::Base
  establish_connection(
    :adapter  => "mysql",
    :host     => "127.0.0.1",
    :username => "db_user",
    :password => "db_pass",
    :database => "mydb_production",
    :port     => 3307
  )
end

puts MyClass.all.size

它工作正常。我做错了什么?

谢谢。

最佳答案

我能够通过使用 mysql2 gem 使它在没有 fork 的情况下工作

require 'rubygems'
require 'active_record'
require 'mysql2'
require 'net/ssh/gateway'

gateway = Net::SSH::Gateway.new(
  'remotehost.com',
  'username'
)
port = gateway.open('127.0.0.1', 3306, 3307)

class Company < ActiveRecord::Base
  establish_connection(
    :adapter  => "mysql2",
    :host     => "127.0.0.1",
    :username => "dbuser",
    :password => "dbpass",
    :database => "dbname",
    :port     => 3307
  )
end
puts Company.all.size

关于ruby-on-rails - 无法使用 ssh 隧道和 activerecord 连接到远程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404214/

相关文章:

ruby - TextMate 的执行和更新 ‘# =>’ 标记使用 ruby​​ 1.8 而不是 1.9 进行评估

ruby-on-rails - 将 strip 添加到 Rails 应用程序

mysql - Rails 2.3.18 升级到 3.2.21 即时获取 "no method ' with_connection'"事件记录查询错误

ruby-on-rails - 通过关系在 has_many 中查找唯一记录的更好方法

ruby-on-rails - Rails 3. has_many 作为另一个类

ruby-on-rails - RSpec/FactoryGirl - Rails STI - 平等

mysql - 我可以在 ruby​​ on Rails 中使用存储过程吗?

ruby-on-rails - ruby-rubocop 无法加载此类文件 -- rubocop/rspec/focused

ruby-on-rails - Rails 5.0.2 - 关系中的 ID own_to/has_many

javascript - application.js 未在开发中加载(未捕获的 ReferenceError : $ is not defined)