我们如何validationSequel.connect是否在Rails中打开了我们的SQLite3数据库?

我们试图找出我们的Rails 3.1.12应用程序是否打开带有gem续集的SQLite3数据库(版本3.6或更高版本)。 这是我们做的:

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

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

    它返回:

     => # 

    sequel.class也会返回:

     => Sequel::SQLite::Database 

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

我们不太确定数据库(这里的开发)是否已经打开。 我们如何检查?

副手我会说你可以尝试:

 DB.test_connection => true 

test_connection的文档说:

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

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

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

哪个回报:

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

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

Michael Berkowski的评论值得回答。

Sequel.connect方法接受test: true选项。 根据文件 :

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

它会导致Sequel在新的db对象上调用#test_connection