gpt4 book ai didi

ruby-on-rails - ActiveRecord 执行 SQL 需要关闭连接吗?弃用警告 : Database connections will not be closed automatically

转载 作者:行者123 更新时间:2023-12-03 16:08:57 26 4
gpt4 key购买 nike

首先,我在 Puma 上使用 Rails 3.2(但使用 MRI),并且没有手动执行任何显式线程。

我在使用 execute 的地方方法,如 MyModel.connection.execute或者我知道 ActiveRecord::Base.connection.execute可以做同样的事情,因为现在所有连接都指向同一个数据库。

我最近开始看

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

这似乎不言自明,但我在网上找到的信息很少,主要是关于将 ActiveRecord 与 Sinatra 结合使用(例如 ActiveRecord connection warning. (Database connections will not be closed automatically))。

我读到这个:

http://blog.daniel-azuma.com/archives/216

这表明只要 DB 执行事务是在 Controller 中完成的,Rack 中间件就会为我做这件事(如果我理解正确的话)。这是否意味着在其他地方完成的事务(例如模型或装饰器 - 它们在很多地方都很有用,所以我不想将它们放在单个 Controller 中)必须明确关闭?即使它是从 Controller 调用的模型方法,例如:
class MyController
def show
MyModel.do_execute_sql_stuff
end
end

class MyModel
def self.do_execute_sql_stuff
connection.execute("WHATEVER;")
end
end

我需要在这里明确关闭吗?如果是这样,我应该使用 MyModel.connection.closeMyModel.clear_active_connections!正如文章所暗示的那样?也许是因为英语不是我的母语,但这种方法听起来很危险!我该怎么做?
conn = MyModel.connection
result = conn.execute("STUFF")
do_stuff_with(result)
conn.close |or| MyModel.clear_active_connections!

像那样?

什么时候用 find_by_sql ?它会返回与池的连接,还是我必须明确这样做?

编辑:奇怪的是,我只在我的生产日志中看到这一点。不是开发,也不是登台(应该与生产相同)。

最佳答案

在这种情况下,您需要手动关闭连接。

运行脚本后,您可以像这样手动关闭它。

after do
ActiveRecord::Base.connection.close
end

关于ruby-on-rails - ActiveRecord 执行 SQL 需要关闭连接吗?弃用警告 : Database connections will not be closed automatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18285905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com