Je vais avoir des problèmes avec le script suivant:Impossible de se connecter à distance à l'aide db tunnel ssh et activerecord
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!
Quand je lance le script, il se bloque juste, à moins que je retire la requête activerecord. Je sais que je peux connecter en utilisant tunnel parce que je peux créer un tunnel à partir de la commande comme comme ceci:
ssh -f [email protected] -L 3307/127.0.0.1/3306 -N
Ensuite, si je lance:
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
Il fonctionne très bien. Qu'est-ce que je fais mal?
Merci.
Avez-vous essayé d'ouvrir la porte d'entrée dans un autre thread ou processus? Je crois que votre problème pourrait être causé par une impasse due à la façon dont MySQL pourrait essayer de faire des E/S sur votre tunnel ... – Romain