【问题标题】:DELAYED_JOB Update_attribute in delayed job is not working, table not updated延迟作业中的 DELAYED_JOB Update_attribute 不起作用,表未更新
【发布时间】:2012-05-24 13:56:18
【问题描述】:

我一直想做Delayed::Job 来做fbLikes (我在StackOverFlow 上发布了很多但仍然没有解决问题) 我的表n 数据库有名称、id、fbLikes、fbId、url . 这是我的程序步骤。 [主页]公司列表 -> 创建公司[插入公司信息] -> 保存 fbId、名称、id、url 但不是 FBLIKES -> 重定向到主页 [after_save 更新之前添加的公司的 fbLikes]

我不确定我延迟的工作是否有效,因为我的模型中的 fbLikes 仍然是空白的,并且没有更新最新的 fbLikes。我不确定是否有更好的方法来做到这一点。 对于“rake jobs:work”,控制台中没有后台工作显示。

[模型公司.rb]

require "delayed_job"
require "count_job.rb"
after_save :fb_likes
def fb_likes    
    Delayed::Job.enqueue(CountJob.new(self.id))
end

[lib/count_job.rb]

require 'net/http'
require 'company.rb'

class CountJob < Struct.new(:id)        
  def perform
    @company = Company.find(id)
    uri = URI("http://graph.facebook.com/#{@company.fbId}")
    data = Net::HTTP.get(uri)
    @company.fbLikes= JSON.parse(data)['likes']
    @company.save!
  end
end

【问题讨论】:

  • 我注意到一些事情是您使用了 CountJob.new(@count) 但您的 CountJob 类没有定义任何初始化程序。你没有例外吗?另外,如果在delayed_job 运行之前创建了另一家公司,会发生什么?也许您应该将 id 传递给 CountJob 并将其放入 create 方法中。
  • 我尝试了很多方法来做到这一点(无论是否传递值或模型或页面控制器中的延迟作业)但仍然无济于事。
  • 检查您的数据库是否创建了作业以及是否有任何 last_error。

标签: ruby ruby-on-rails-3 delayed-job update-attributes update-attribute


【解决方案1】:

[模型公司.rb]

require "delayed_job"
require "count_job.rb"
after_save :fb_likes
def fb_likes    
    Delayed::Job.enqueue(CountJob.new(self.id))
end

[lib/count_job.rb]

require 'net/http'
require 'company.rb'

class CountJob < Struct.new(:id)        
  def perform
    @company = Company.find(id)
    uri = URI("http://graph.facebook.com/#{@company.fbId}")
    data = Net::HTTP.get(uri)
    @company.fbLikes= JSON.parse(data)['likes']
     @company.save!
   end
 end

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2012-06-04
    • 2015-12-11
    相关资源
    最近更新 更多