为什么delayed_job handle_asynchronously方法推送到models集合而不是delayed_backend_mongoid_jobs?

时间:2011-12-15 03:10:29

标签: ruby-on-rails mongodb mongoid delayed-job

尝试使用mongoid后端使用delayed_job。创建的作业无法运行,显然是因为它被推送到db.entries集合而不是db.delayed_backend_mongoid_jobs集合。

在类Entry中给出以下代码:

after_create :create_dj
def create_dj
  Rails.logger.info "ENTRY CREATED at #{created_at}"
end
handle_asynchronously :create_dj, run_at: Proc.new { 30.seconds.from_now }

我希望在delayed_backend_mongoid_jobs集合中创建一个新的delayed_job条目。相反,我看到以下数据库日志:

MONGODB health_blog_development['entries'].insert([
  {"content"=>"foo", "_id"=>BSON::ObjectId('4ee95ed3b643988551000044') ... }, 
  {"priority"=>0, "attempts"=>0, "handler"=>"--- !ruby/struct:Delayed::PerformableMethod ... }])

好像它认为应该把工作推到条目集合中。

可能相关的一些细节:

  • 条目已被分组。我已经尝试了Entry及其子类TextEntry中的代码。
  • 当handle_asynchronously未被使用时,该函数运行find。
  • Entry不是嵌入式类,但确实有几个引用的关系。
  • 我设置了config.mongoid.preload_models = true
  • 我已经确认,如果我在同一个项目中使用了新模型,delayed_job会按预期工作。

使用的宝石:

  • mongoid(2.2.4)
  • rails(3.0.9)
  • delayed_job(2.1.4)
  • delayed_job_mongoid(1.0.4)

如果有任何其他细节可能有助于弄清楚这里发生了什么,请告诉我。干杯!

2 个答案:

答案 0 :(得分:0)

我认为delayed_job集合中的条目引用了创建它们的类,在本例中是Entry类。

您实际获得的错误是什么?

答案 1 :(得分:0)

这似乎是由delayed_job和Apotomo小部件框架的组合产生的有趣行为。将进程更改为使用常规Rails表单而不是Apotomo url_for_event进程可以解决问题。