我们在带有数据库清理程序的测试套件中随机出现以下错误。我们正在使用数据库清理程序以及我认为相关的以下两个代码片段:
错误:
Mysql2::Error: This connection is in use by: #<Thread:0x00000017bbf2f8 sleep>: TRUNCATE TABLE `cr_contacts`;
共享数据库连接(可能的原因)
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
答案 0 :(得分:9)
错误告诉您DB清理程序想要在其他线程仍在使用连接时进行截断。这可能发生在使用selenium的集成测试中。
看起来您正在使用2种机制进行数据库清理:
这不行。要使用DB清理器,请关闭事务夹具并删除共享连接修补程序。我建议按照Avdi Grimm撰写的这篇精彩文章中描述的方式对其进行配置:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/