gpt4 book ai didi

ruby-on-rails - 有时 Resque "unloads"Rails 环境无明显原因

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:44 25 4
gpt4 key购买 nike

我有一个简单的 Ruby on Rails 堆栈和 resque .我以正常方式排队工作,并且有一群 worker 正在执行。没什么疯狂的。

我的问题是,如果我让工作人员运行足够长的时间,他们将停止查看应用程序的模型,并且每次调用此类方法都会导致 undefined_method

这很奇怪,因为它可以完美地工作几天,然后突然开始失败。重新启动 worker 可以解决问题,但它通常会在一段时间后恢复。

我不知道会发生什么,所以非常感谢任何指示。

最佳答案

Resque workers fork 新进程来完成工作。您的模型的类可能未加载到派生的子进程中。由于类的加载顺序,也可能存在命名空间冲突。

如果您在开发中更改类文件而不重新启动您的 resque worker,我怀疑它没有正确地重新加载您的类。

要确保您的类在 fork 前加载,请在 resque 设置任务中引用这些类。预 fork 加载的类将被复制到子进程。下面,我将它们放在一个数组中以强制加载它们。这也更快,因为每个子进程都已经加载了类。如果您使用的是 AR,您还应该在 after_fork block 中重新建立 ActiveRecord 连接。

lib/tasks/resque.rake:

namespace :resque do
task :setup => :environment do
[User, Monkey, Banana] # force these classes to load

Resque.after_fork { ActiveRecord::Base.establish_connection }
end
end

关于ruby-on-rails - 有时 Resque "unloads"Rails 环境无明显原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403370/

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