Я столкнулся с проблемой при использовании кода, который вы упомянули в моем файле spec_helper.rb.
Что происходит, когда ваши тесты зависят от использования соединений с несколькими базами данных? У меня есть две базы данных, к которым мне нужно подключиться при запуске моих тестов. Я провел простой тест, чтобы проверить, что происходит с подключениями к базе данных, которые я установил.
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.
puts "First Record cxn: #{FirstDatabase::Record.connection}"
# => First Record cxn: #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xe59b524>
puts "AR Base cxn: #{ActiveRecord::Base.connection}"
# => AR Base cxn: #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xc52761c>
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
puts "First Record cxn: #{FirstDatabase::Record.connection}"
# => First Record cxn: #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xc52761c>
puts "AR Base cxn: #{ActiveRecord::Base.connection}"
# => AR Base cxn: #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xc52761c>
Как видите, перед вызовом метода общего подключения у меня есть два разных подключения к базе данных. После вызова метода общего подключения у меня только один.
Таким образом, любой тест, требующий подключения ко второму соединению с базой данных для получения информации, не будет выполнен. (
Я опубликую эту проблему и посмотрю, нашел ли кто-нибудь решение.