2011-06-29 36 views
0

某处在我们的Ruby代码时,有三条线是(目前,用于调试)是这样的:“的Mysql ::错误:查询:未连接”使用两个不同的数据库

puts "Established connection to: " \ 
    "#{ActiveRecord::Base.establish_connection(database_config).spec.config}" 
puts "Connection is connected to: " \ 
    "#{ActiveRecord::Base.connection.instance_eval{@config.inspect}} 
ActiveRecord::Base.connection.execute("SELECT 1") # Test connection 

当这代码被击中,第一行始终打印

Established connection to: {:username=>"name", :host=>"localhost", :password=>"pass", 
          :adapter=>"mysql", :database=>"database1"} 

通知我们连接已成功建立。通常,第二行和第三行按预期执行,一切顺利。然后,第二行产生相同样的结果:

Connection is connected to: {:username=>"name", :host=>"localhost", :password=>"pass", 
          :adapter=>"mysql", :database=>"database1"} 

然而,出于某种原因,一旦在每一段时间(例如,几百个测试用例的执行过程中两次),第二生产线生产:

Connection is connected to: {:username=>"name", :host=>"localhost", :password=>"pass", 
          :adapter=>"mysql", :database=>"database2"} 

(注意不同的数据库)和第三线失败,并

Mysql::Error: query: not connected: SELECT 1 
$APP_ROOT/vendor/bundle/ruby/1.8/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log': Mysql::Error: query: not connected: SELECT 1 (ActiveRecord::StatementInvalid) 
from $APP_ROOT/vendor/bundle/ruby/1.8/gems/activerecord-3.0.4/lib/active_record/connection_adapters/mysql_adapter.rb:289:in `execute' 
from $APP_ROOT/somewhere_in_our_code.rb:84:in `establish_database_connection' (which is the third line quoted above) 

(我想你可以忽略“StatementInvalid”中就有:这是一个有效的中号ySQL查询,并在该消息中使用StatementInvalid似乎在ActiveRecord的代码中的小bug)

所以,出于某种原因,建立连接和获取绑定到线程的连接之间,ActiveRecord的迷糊。有谁知道为什么会发生这种情况?

CentOS Linux,Ruby 1.8.7(企业版2011.03),Rails 3.0.4,MySQL 2.8.1。

几乎所有在网络上发现的错误都涉及在Windows系统上降级mysql DLL,这在此不适用。

回答

相关问题