Mysql2:: Ошибка: это соединение используется
Мы случайно получаем следующую ошибку в нашем наборе тестов с очистителем базы данных. Мы используем очиститель баз данных в сочетании со следующими двумя фрагментами кода, которые, как я думаю, связаны между собой:
Ошибка
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
Ответы
Ответ 1
Ошибка говорит вам, что очиститель БД хочет сделать усечение, в то время как другой поток все еще использует соединение. Это, вероятно, происходит в ваших тестах интеграции с селеном.
Похоже, вы используете 2 механизма очистки базы данных:
- транзакционные светильники с патчами общих подключений
- усечение с очистителем базы данных
Это не нормально. Чтобы использовать очиститель БД, отключите транзакционные приборы и удалите патч общего доступа. Я предлагаю настроить его так, как описано в этой замечательной статье Авди Гримма: http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/