【问题标题】:How do we verify if Sequel.connect opened our SQLite3 database in Rails?我们如何验证 Sequel.connect 是否在 Rails 中打开了我们的 SQLite3 数据库?
【发布时间】:2013-06-21 16:14:45
【问题描述】:

我们正在尝试确定我们的 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 检查表时,返回的文本显示该表不存在。

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

【问题讨论】:

    标签: ruby ruby-on-rails-3 sqlite sequel


    【解决方案1】:

    我想说你可以试试:

    DB.test_connection
    => true
    

    test_connection 的文档说:

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

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

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

    返回:

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

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

    【讨论】:

    • 对于它的价值,您还可以将:test =&gt; true 选项传递给connect() 方法,该方法实现与test_connection() 相同的功能
    【解决方案2】:

    从 5.0.0 版本开始,Sequel 默认验证连接test 选项的默认值现在是 true)。

    作为Michael Berkowski noted in their commentSequel.connect 方法接受一个布尔值test 选项。在 Sequel 5.0.0 之前该选项默认为 false。 The current docs说:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多