2014-03-13 82 views
0

我有一个'主要'rails应用程序,需要将某些作业卸载到某个指定的延迟作业队列。我想保留所有在独立应用程序中处理这些作业的逻辑,这些应用程序可以在与主要Web应用程序服务器分开的服务器上运行。它将连接到相同的数据库,但仅定义了一小部分模型,它只需处理这些作业即可。如何从应用程序的“延迟作业”队列中“消耗”作业,除了“生成”作业队列

当我排队工作时,有没有什么办法可以排队记录的ID作用?结合队列名称,我认为这应该足以让工作人员知道该怎么做。或者,如果需要提供一个类,我可以在主应用程序中拥有一个虚拟的精简版本,而在单独的“工作”应用程序中,类的版本中具有实际的实现逻辑?

+0

一件事我了解到,在“制作”应用程序中,我需要提供一个大部分为空的作业类,它有一个名为“执行”的方法。这个名字相同但实际实现的类然后住在有DJ工作者的'消费'应用程序中。从数据库中获取的id是唯一真正必须传递的,但'job'类确实需要存在才能从我所能告诉的队列中排队。 – sockmonk

回答

1

其实,你在上面的描述是正确的: 你要排队一个id,有时其他所需信息来识别您想从数据库中提取的记录,而不是一个对象,尤其是如果它是一个ActiveRecord::Base目的。

排队一个对象是有问题的,并可能导致问题。检查我的答案在:

https://stackoverflow.com/a/21751030/226255

如果你的第二个应用是做在控制台下正确地拉着你可以测试:(确保推Delayed::Job排队第一)

Delayed::Job.first.invoke_job