在使用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
答案 0 :(得分:1)
根据我的经验,永远不要将对象推送到队列,而是使用对象的id。这是有问题的,很难调试。
我在这个主题上写了一篇详细的帖子: https://stackoverflow.com/a/15672001/226255