gpt4 book ai didi

ruby-on-rails - rails : Thread won't affect database unless joined to main Thread

转载 作者:数据小太阳 更新时间:2023-10-29 08:51:15 25 4
gpt4 key购买 nike

我有一个后台操作,我想在 Rails 中每 20 秒发生一次,前提是某些条件为真。当某个 Controller 路由被命中时它就开始了,它看起来像这样

def startProcess
argId = self.id
t = Thread.new do
while (Argument.isRunning(argId)) do
Argument.update(argId)
Argument.markVotes(argId)
puts "Thread ran"
sleep 20
end
end
end

但是,这段代码对我的数据库绝对没有任何作用,除非我调用 "t.join",在这种情况下,我的整个服务器会被阻塞很长时间(但它可以工作)。

为什么读不能在没有加入主线程的情况下提交ActiveRecords?线程调用的方法看起来像

def sample
model = Model.new()
model.save()
end

但是模型不会保存到数据库中,除非线程连接到主线程。为什么是这样?几个小时以来,我一直在为此苦思冥想。

编辑:

标记为正确的答案在技术上是正确的,但是此编辑是为了概述我最终使用的解决方案。问题是 Ruby 没有真正的线程,所以即使我的数据库连接正常工作,线程也无法获得处理器时间,除非到服务器的流量很少。

解决方案:启动一个新的 Heroku worker 实例,将其指向同一个数据库,并使其执行一个与线程具有相同功能的 rake 任务。现在一切正常。

最佳答案

需要重新建立数据库连接:

ActiveRecord::Base.establish_connection Rails.env

关于ruby-on-rails - rails : Thread won't affect database unless joined to main Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444198/

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