2013-06-11 42 views
11

Chúng tôi nhận được lỗi sau đây ngẫu nhiên trong bộ thử nghiệm của chúng tôi với trình dọn dẹp cơ sở dữ liệu. Chúng tôi đang sử dụng cơ sở dữ liệu sạch kết hợp với những điều sau hai đoạn mã mà tôi nghĩ rằng có liên quan:Mysql2 :: Lỗi: Kết nối này đang được sử dụng bởi

Lỗi:

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

Shared DB kết nối (Nguyên nhân có khả năng)

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 

Trả lời

9

Lỗi này cho bạn biết trình dọn dẹp DB muốn cắt ngắn trong khi luồng khác vẫn đang sử dụng kết nối. Điều này có thể xảy ra trong các bài kiểm tra tích hợp của bạn với selen.

Dường như bạn đang sử dụng 2 cơ chế để làm sạch cơ sở dữ liệu:

  • đồ đạc giao dịch với các kết nối chia sẻ vá
  • cắt ngắn với cơ sở dữ liệu sạch

Đây không phải là ok. Để sử dụng trình dọn dẹp DB, hãy tắt các đồ thị giao dịch và xóa bản vá kết nối được chia sẻ. Tôi khuyên bạn nên định cấu hình theo cách được mô tả trong bài viết tuyệt vời này của Avdi Grimm: http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

Các vấn đề liên quan