Hsi*_*Dai 6 activerecord ruby-on-rails
首先,我在Puma上使用Rails 3.2(但是使用MRI),并且我没有手动执行任何显式线程.
我在使用该execute
方法的地方,MyModel.connection.execute
或者我知道ActiveRecord::Base.connection.execute
可以做同样的事情,因为现在所有连接都是针对我的同一个DB.
我最近开始看到
DEPRECATION WARNING: Database connections will not be closed automatically, please close your database connection at the end of the thread by calling `close` on your connection. For example ActiveRecord::Base.connection.close
Run Code Online (Sandbox Code Playgroud)
这似乎是不言自明的,但我可以在网上找到很少的信息,主要是关于将ActiveRecord与Sinatra一起使用(前ActiveRecord连接警告.(数据库连接不会自动关闭)).
我看了这个:
http://blog.daniel-azuma.com/archives/216
这表明,只要数据库执行事务在控制器中完成(如果我理解正确的话),Rack中间件就能为我完成.这是否意味着在其他地方完成的事务(例如模型或装饰器 - 它们在许多地方都很有用,所以我不想将它们放在单个控制器中)必须明确关闭?即使它是从控制器调用它的模型方法,例如:
class MyController
def show
MyModel.do_execute_sql_stuff
end
end
class MyModel
def self.do_execute_sql_stuff
connection.execute("WHATEVER;")
end
end
Run Code Online (Sandbox Code Playgroud)
我需要在这里明确关闭吗?如果是这样,我应该使用MyModel.connection.close
或MyModel.clear_active_connections!
正如文章建议的那样?也许是因为英语不是我的第一语言,但这种方法听起来很危险!我该怎么办呢?
conn = MyModel.connection
result = conn.execute("STUFF")
do_stuff_with(result)
conn.close |or| MyModel.clear_active_connections!
Run Code Online (Sandbox Code Playgroud)
像那样?
使用时find_by_sql
怎么样?它会返回到池的连接,还是我必须明确地这样做?
编辑:奇怪的是,我只在生产日志中看到这一点.不是开发,也不是分期(应该与生产相同).
小智 5
在这种情况下,您需要手动关闭连接.
运行脚本后,您可以像这样手动关闭它.
after do
ActiveRecord::Base.connection.close
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10309 次 |
最近记录: |