ActiveRecord连接警告。 (数据库连接不会自动关闭)

我正在尝试用Sinatra和ActiveRecord创建一个小应用程序(3.2.3)。

这是我的主文件的样子:

require "sinatra" require "sinatra/reloader" require "active_record" ... ActiveRecord::Base.establish_connection( adapter: 'sqlite3', database: 'db.sqlite3', host: 'localhost', ) class Post < ActiveRecord::Base ... end get('/') { ... } get('/posts') { ... } ... 

它有效,但有时我会在控制台中收到警告:

弃用警告:数据库连接不会自动关闭,请通过在连接上调用close线程末尾的数据库连接。 例如:ActiveRecord :: Base.connection.close’

发生警告时,页面刷新需要很长时间。 我不明白我应该在哪里关闭连接。 我试图将ActiveRecord::Base.connection.close放在文件的底部,但它没有帮助。

更新:

我忘了提到我也使用来自sinatra-contrib gem的sinatra / reloader插件来查看效果而无需重启服务器。

 require "sinatra/reloader" 

如果我发表评论,那么问题就会消失。 但无论如何,我想知道如何在不禁用重新加载器的情况下解决问题。

您需要在堆栈中添加中间件。 只需将此行添加到config.ru rack up文件中:

 use ActiveRecord::ConnectionAdapters::ConnectionManagement 

在这里找到答案: https : //github.com/puma/puma/issues/59

接受的答案在Sinatra on Thin(线程模式)上对我没有用。 相反,我用过:

 after do ActiveRecord::Base.connection.close end 
 ActiveRecord::Base.remove_connection 

对我来说工作正常,并列在文档中。