2013-06-11 21 views
11

我們在數據庫清理器的測試套件中隨機出現以下錯誤。我們使用的數據庫清理結合下面的兩段代碼,我認爲是相關的:Mysql2 ::錯誤:此連接正在使用中

錯誤

Mysql2::Error: This connection is in use by: #<Thread:0x00000017bbf2f8 sleep>: TRUNCATE TABLE `cr_contacts`; 

共享DB連接(可能的原因)

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 

回答

9

錯誤是告訴你DB清理器想要截斷,而其他線程仍在使用連接。這可能發生在使用硒的集成測試中。

它看起來像你使用2個機制數據庫清洗:

  • 事務燈具採用共享連接補丁
  • 截斷與數據庫清理

這也不行。要使用數據庫清理器,請關閉事務夾具並刪除共享連接補丁。我建議按Avdi Grimm在這篇偉大文章中描述的方式對其進行配置:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

相關問題