为什么大型作业对象会错过队列?

时间:2012-11-13 01:10:02

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

在使用delayed_job的rails项目中,我遇到了一些奇怪的事情。

我有一个article模型,这个模型可能非常大,在几个字段中有很多段文字。

如果我这样做:

an_article.delay.do_something

创建的Delayed::Job没有进入队列,它从未标记为失败或成功,我的日志不承认它存在。但是如果我做的话

def self.proxy_method(article_id)
  an_article = Article.find(article_id)
  an_article.do_something
end

Article.proxy_method(an_article.id)

它按预期工作。

是否有一些关于作业对象大小的不成文规则?为什么A不起作用,但B工作?

我的一个理论是,因为我接近mongolab(430/496 mb)的数据上限,所以作业永远不会进入数据库,但我没有记录或错误来证明这一点。


注意:delayed_job在heroku上使用mongoid,rails 3.1

1 个答案:

答案 0 :(得分:1)

根据我的经验,永远不要将对象推送到队列,而是使用对象的id。这是有问题的,很难调试。

我在这个主题上写了一篇详细的帖子: https://stackoverflow.com/a/15672001/226255