MrJ*_*ger 3 ruby-on-rails delayed-job mongoid
我正在构建一个应用程序,该应用程序有时需要将fb中的一堆数据与我的数据库同步,所以我(尝试)使用“延迟作业”将其推送到后台。这是我的“延迟工作”类的一部分。
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
Run Code Online (Sandbox Code Playgroud)
与RsvpHelper班级一起生活lib/RsvpHelper.rb。因此,在我的应用程序中的某个时候,我会Delayed::Job.enqueue(FbSyncJob.new(user.id))与一个已知的有效用户进行呼叫。我建立的工作人员甚至告诉我工作已成功完成:
1 jobs processed at 37.1777 j/s, 0 failed
但是,当我在数据库中检查用户时,他的朋友列表尚未更新。我做错了什么还是什么?非常感谢您的帮助,这使我发疯。
Delayed::Job.enqueue 会在延迟的作业表中放置一条记录,但是您需要运行一个单独的进程来执行作业代码(执行方法)
通常在开发中是这样bundle exec rake jobs:work(注意:您在进行代码更改时必须重新启动此rake任务,它将不会自动加载更改)
在开发过程中,我通常将以下内容放入延迟的配置中-这永远不会在延迟的作业表中添加记录,并且同步(在开发中)运行所有后台代码,并且默认情况下,rails将重新加载对代码的更改
Delayed::Worker.delay_jobs = !(Rails.env.test? || Rails.env.development?)
| 归档时间: |
|
| 查看次数: |
4576 次 |
| 最近记录: |