Ruby on rails Sidekiq作业存储对类常量的引用,还有什么?轨道

Ruby on rails Sidekiq作业存储对类常量的引用,还有什么?轨道,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,假设我有一份工作在单独的线程中启动,如下所示: TaxCalculator.perform_async({ user_id: user.id, description: 'test description', count: 1 }) 假设实际的类类似于: class TaxCalculator def perform(args) user = User.find(args['user_id']) description = args['description']

假设我有一份工作在单独的线程中启动,如下所示:

TaxCalculator.perform_async({ user_id: user.id, description: 'test description', count: 1 })
假设实际的类类似于:

class TaxCalculator
  def perform(args)
      user = User.find(args['user_id'])
      description = args['description']
      #some stuff goes on here
  end
end

比如说排队很长。有些事情会发生,可能会进行代码更改和部署。当作业最终启动时,需要哪些引用。如果类名更改为其他名称,如
Namespace::TaxCalculator
,作业会失败吗?什么样的推荐人还在Sidekiq工作?争论?身份证?类的名称?

随着结构的更改,您可以使用旧常量作为指向新常量的链接,例如:

TaxCalculator=Namespace::TaxCalculator


。。。在下一次更新中,您可以删除此链接,因为所有作业都已完成。

随着结构的更改,您可以使用旧常量作为新的链接,例如:

TaxCalculator=Namespace::TaxCalculator


。。。在下一次更新中,您可以删除此链接,因为所有作业都已完成。

典型的建议是将SIGUSR1发送到Sidekiq守护程序,告诉它停止接受新工作,让它完成队列中所有作业的运行,使用这些类型的更改重新部署代码,发送SIGTERM以杀死守护程序,然后重新启动它。典型的建议是将SIGUSR1发送到Sidekiq守护进程,告诉它停止接受新工作,让它完成队列中的所有作业,使用这些类型的更改重新部署代码,发送SIGTERM以杀死守护进程,然后重新启动它。确切地说,Sidekiq存储类名,因此如果您更改它,您需要保留旧类名,直到所有旧作业都已处理。确切地说,Sidekiq存储类名,因此如果您更改它,您需要保留旧类名,直到所有旧作业都已处理。