Ruby on rails Rails/延迟作业:无法从延迟作业中保存模型

Ruby on rails Rails/延迟作业:无法从延迟作业中保存模型,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我有一个Post模型(如下),它有一个回调方法,可以通过延迟作业修改body属性。如果我删除“延迟”,然后执行“缩短URL”!马上,它就可以正常工作了。但是,从延迟作业的上下文来看,它不会保存更新的正文 class Post < ActiveRecord::Base after_create :shorten_urls def shorten_urls delay.shorten_urls! end def shorten_urls! # this ta

我有一个Post模型(如下),它有一个回调方法,可以通过延迟作业修改body属性。如果我删除“延迟”,然后执行“缩短URL”!马上,它就可以正常工作了。但是,从延迟作业的上下文来看,它不会保存更新的正文

class Post < ActiveRecord::Base
  after_create :shorten_urls

  def shorten_urls
    delay.shorten_urls!
  end

  def shorten_urls!
    # this task might take a long time, 
    # but for this example i'll just change the body to something else
    self.body = 'updated body'
    save!
  end
end
然而,该机构没有更新。有人知道我做错了什么吗

--编辑--

根据Alex的建议,我已将代码更新为如下所示(但无效):

class Post
原因之一可能是将方法传递给
delay
时,
self
未正确序列化。尝试制作
缩短\u URL
一个类方法,它获取记录id并从DB中获取它。

K,请参见上面的“我的编辑”。我按照你的建议做了,尽管它违背了逻辑,但仍然没有更新帖子。对此有什么答案吗?目前遇到相同的问题…有解决方案吗?有更简单的方法吗?@imderek你找到这个问题的解决方案了吗?什么rails/延迟作业版本?我在
rails 3.2.7
delayed\u job 3.0.3
(使用
delayed\u job\u active\u record 0.3.2
)。通过与Foreman一起启动我的应用程序,我终于让DJ开始工作(即,不仅排队/出列作业,而且实际执行作业)(通过与乘客相反的方式获得。我还发现,通过典型的
touch tmp/restart.txt
重启服务器不足以让DJ进程获取代码更改;相反,我停止了Foreman进程(通过
control-c
),然后再次运行
foreman start
。如果有帮助,请+1。
[Worker(host:dereks-imac.home pid:76666)] Post#shorten_urls! completed after 0.0021
[Worker(host:dereks-imac.home pid:76666)] 1 jobs processed at 161.7611 j/s, 0 failed ...
class Post < ActiveRecord::Base
  after_create :shorten_urls

  def self.shorten_urls!(post_id=nil)
    post = Post.find(post_id)
    post.body = 'it worked'
    post.save!
  end

  def shorten_urls
    Post.delay.shorten_urls!(self.id)
  end
end