延迟工作不起作用

时间:2013-03-13 10:30:26

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

我正在构建一个应用程序,在某些时候我需要将来自fb的一堆数据与我的数据库同步,所以我(attemtping)使用Delayed Job将其推送到后台。以下是我的延迟工作类的部分内容。

class FbSyncJob < Struct.new(:user_id)
  require 'RsvpHelper'

  def perform
    user = User.find(user_id)
    FbSyncJob.sync_user(user)
  end

  def FbSyncJob.sync_user(user)
    friends = HTTParty.get(
      "https://graph.facebook.com/me/friends?access_token=#{user.fb['token']}"
    )
    friends_list = friends["data"].map { |friend| friend["id"] }
    user.fb["friends"] = friends_list
    user.fb["sync"]["friends"] = Time.now
    user.save!
    FbSyncJob.friend_crawl(user)
  end
end

RsvpHelper班级居住在lib/RsvpHelper.rb。因此,在我的应用程序中的某个时刻,我使用已知的有效用户调用Delayed::Job.enqueue(FbSyncJob.new(user.id))。我设立的工作人员甚至告诉我工作已经成功完成:

1 jobs processed at 37.1777 j/s, 0 failed

然而,当我在数据库中检查用户时,他没有更新他的朋友列表。我做错了什么或什么?非常感谢你的帮助,这让我很疯狂。

1 个答案:

答案 0 :(得分:3)

Delayed::Job.enqueue会在延迟的作业表中放置一条记录,但是您需要运行一个单独的进程来执行作业代码(执行方法)

通常在开发中这将是bundle exec rake jobs:work(注意:您必须在进行代码更改时重新启动此rake任务,它不会自动加载更改)

我通常在开发过程中将以下内容放入延迟配置中 - 这从不在延迟的作业表中放置记录并同步运行所有后台代码(在开发中),默认情况下rails会重新加载对代码的更改

Delayed::Worker.delay_jobs = !(Rails.env.test? || Rails.env.development?)

相关问题