1

我们正在尝试确定我们的 Rails 3.1.12 应用程序是否打开带有 gem sequel 的 SQLite3 数据库(3.6 或更高版本)。这是我们所做的:

  1. rails console
  2. 在 Rails 控制台会话中,键入以下命令:

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

    它返回:

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

    sequel.class 也返回:

    => Sequel::SQLite::Database
    

但是,当尝试从数据库中选择sequel.execute或检查表时sequel.schema,返回的文本表示该表不存在。

我们不太确定数据库(此处为开发)是否已打开。我们如何检查?

4

2 回答 2

7

我想说你可以试试:

DB.test_connection
=> true

的文档test_connection说:

尝试获取数据库连接。如果成功则返回真。如果不成功,可能会引发错误。如果给出了服务器参数,则尝试获取到给定服务器/分片的数据库连接。

多年前,我们会使用良性查询来判断连接是否存在。你可以试试:

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

返回:

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

您可能希望捕获查询失败时可能引发的任何异常,但这表明连接也已关闭。

于 2013-06-25T06:36:44.113 回答
3

从 5.0.0 版本开始,Sequel 默认验证连接(该test选项的默认值为 now true)。

正如Michael Berkowski 在他们的评论中指出的那样,该Sequel.connect方法接受一个布尔test选项。在 Sequel 5.0.0 之前该选项默认为 false。当前的文档说:

是否测试是否可以建立有效的数据库连接(默认为 true)

设置后,此选项会导致 Sequel 调用#test_connection新的 db 对象。

于 2017-05-05T11:32:03.450 回答