DELAYED_JOB Update_attribute в отложенном задании не работает, таблица не обновляется

Меня хотели выполнить Delayed::Job, чтобы выполнить fbLikes (я много публикую в StackOverFlow, но до сих пор не решил проблему). Моя таблица n базы данных имеет имя, идентификатор, fbLikes, fbId, url. Вот мои шаги для программы. [Домашняя страница] список компаний -> Создать компанию [Вставить информацию о компании] -> Сохранить fbId, имя, идентификатор, URL-адрес, НО НЕ FBLIKES -> перенаправить на домашнюю страницу [after_save Обновить fbLikes для предыдущей добавленной компании]

Я не уверен, работает ли моя отложенная работа или нет, потому что мои fbLikes в моей модели все еще пусты и не обновлены последними fbLikes. Я не уверен, что есть лучший способ сделать это. Для "rake jobs:work" в консоли не отображается фоновая работа.

[МОДЕЛЬ компании.рб]

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

person shoujo_sm    schedule 21.04.2012    source источник
comment
Я заметил несколько вещей: вы использовали CountJob.new(@count), но ваш класс CountJob не определяет никаких инициализаторов. Вы не получаете исключение? Кроме того, что произойдет, если другая компания будет создана до запуска delayed_job? Возможно, вам следует передать идентификатор в CountJob и поставить его в очередь в методе создания.   -  person gmalette    schedule 21.04.2012
comment
Я пробовал много способов сделать это (будь то значение передачи или нет, или отложенное задание в модели или в контроллере страницы), но все равно безрезультатно.   -  person shoujo_sm    schedule 22.04.2012
comment
Проверьте свою базу данных, создается ли задание и есть ли в нем какая-либо last_error.   -  person gmalette    schedule 24.04.2012


Ответы (1)


[МОДЕЛЬ компании.рб]

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
person shoujo_sm    schedule 24.05.2012