Почему ActiveRecord :: Base.connected? ложно, после вызова create_connection - PullRequest
10 голосов
/ 18 августа 2010

Я разрабатываю приложение Sinatra и использую там ActiveRecord для работы с базой данных, но столкнулся с одной проблемой. Я написал тест для модели, и он ломается с

SQLite3 :: CantOpenException: невозможно открыть файл базы данных

Соединение с базой данных устанавливается в test_helper.rb со следующим кодом:

Dir.chdir('..') do
  ActiveRecord::Base.establish_connection(db_config)
end

и ActiveRecord::Base.connected? становятся ложными. Если я позвоню, например, User.find(:all) после того, как установление соединения пройдет, и ActiveRecord::Base.connected? будет истинным. Зачем? Я не понимаю.

Ответы [ 3 ]

6 голосов
/ 27 февраля 2015

ActiveRecord::Base.establish_connection только устанавливает соединение, и ActiveRecord фактически не соединяется, пока не будет запрошено соединение с базой данных. Следующий код может помочь вам заставить ActiveRecord установить соединение для пула соединений:

connected = ActiveRecord::Base.connection_pool.with_connection { |con| con.active? }  rescue false

rescue false скрывает пару потенциальных исключений (например, PG::ConnectionBad). Обратитесь к документации : with_connection для получения дополнительной информации.

1 голос
/ 09 ноября 2012

ActiveRecord :: Base.establish_connection делегирован ActiveRecord :: ConnectionAdapters :: ConnectionHandler # stablish_connection, и если вы посмотрите на его реализацию , вы увидите, что он просто создает соединение

0 голосов
/ 27 июня 2012

Убедитесь и запустите rake db:create для своей тестовой среды.Похоже, что БД не существует и в SQLite это должно зависеть от каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...