Где-то в нашем Ruby-коде есть три строки, которые (в настоящее время (для целей отладки)) выглядят так:
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": это действительный MySQLзапрос и использование StatementInvalid в этом сообщении кажется незначительной ошибкой в коде ActiveRecord)
Так, по какой-то причине, между установлением соединения и получением соединения для привязки к потоку, ActiveRecord запутывается,Кто-нибудь знает, почему это может происходить?
CentOS Linux, Ruby 1.8.7 (Enterprise Edition 2011.03), Rails 3.0.4, MySQL 2.8.1.
Почти во всех случаяхоб этой ошибке вы можете найти в сети о понижении версии mysql DLL в системах Windows, что здесь не применимо.