Как проверить, открыл ли Sequel.connect нашу базу данных SQLite3 в Rails?

Мы пытаемся выяснить, открывает ли наше приложение Rails 3.1.12 базу данных SQLite3 (версия 3.6 или выше) с продолжением gem. Вот что мы сделали:

  1. rails console
  2. В сеансе консоли Rails введите следующую команду:

    sequel = Sequel.connect('sqlite://development')
    

    Он возвращает:

    => #<Sequel::SQLite::Database: "sqlite://development">
    

    Также сиквел.класс возвращает:

    => Sequel::SQLite::Database
    

Однако при попытке выбрать из базы данных с помощью sequel.execute или проверить таблицу с помощью sequel.schema возвращаемый текст говорит о том, что таблица не существует.

Мы не совсем уверены, была ли открыта база данных (здесь разработка) или нет. Как мы это проверим?


person user938363    schedule 25.06.2013    source источник


Ответы (2)


Навскидку я бы сказал, что вы можете попробовать:

DB.test_connection
=> true

В документации для test_connection говорится:

Попытки получить соединение с базой данных. Возвращает true в случае успеха. Вероятно, вызовет ошибку в случае неудачи. Если указан аргумент сервера, пытается получить соединение с базой данных с данным сервером/осколком.

Несколько лет назад мы бы использовали безобидный запрос, чтобы узнать, живо ли соединение. Ты можешь попробовать:

DB["select datetime('now');"].first

Что возвращает:

{
    :"datetime('now')" => "2013-06-25 06:23:44"
}

Вы, вероятно, захотите поймать любые исключения, которые могут возникнуть, если запрос завершится ошибкой, но это будет означать, что соединение также не работает.

person the Tin Man    schedule 25.06.2013
comment
Для чего бы это ни стоило, вы также можете передать параметр :test => true методу connect(), который достигает того же, что и test_connection(). - person Michael Berkowski; 12.11.2014

Начиная с версии 5.0.0, Sequel по умолчанию проверяет соединение (значение параметра test по умолчанию теперь равно true).

Как отметил Майкл Берковски в их комментарии метод Sequel.connect принимает логическую опцию test. Этот параметр по умолчанию имел значение false до Sequel 5.0.0. Текущие документы говорят:

Проверять, можно ли установить действительное соединение с базой данных (true по умолчанию)

Если этот параметр установлен, Sequel вызывает #test_connection для нового объекта базы данных.

person mkataja    schedule 05.05.2017