我正在尝试使用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') { ... }
...
它有效,但有时我会在控制台中收到警告:
DEPRECATION WARNING:数据库连接不会关闭 自动,请在结束时关闭您的数据库连接 通过在您的连接上调用
close
线程。例如: ActiveRecord的:: Base.connection.close'
发生警告时,页面刷新需要很长时间。
我不明白我应该在哪里关闭连接。我试图将ActiveRecord::Base.connection.close
放在文件的底部,但它没有帮助。
更新
我忘了提到我还使用来自sinatra-contrib gem的sinatra / reloader插件来查看效果,而无需重新启动服务器。
require "sinatra/reloader"
如果我发表评论,那么问题就会消失。但无论如何,我想知道如何在不禁用重新加载器的情况下解决问题。
答案 0 :(得分:13)
您需要在堆栈中添加中间件。 只需将此行添加到config.ru rack up文件:
use ActiveRecord::ConnectionAdapters::ConnectionManagement
答案 1 :(得分:13)
接受的答案在Sinatra on Thin(线程模式)上对我没有用。相反,我用过:
after do
ActiveRecord::Base.connection.close
end
答案 2 :(得分:1)
ActiveRecord::Base.remove_connection
适用于我并且在文档中列出。