gpt4 book ai didi

ruby-on-rails - 延迟工作只是不工作

转载 作者:行者123 更新时间:2023-12-01 11:45:55 24 4
gpt4 key购买 nike

我正在构建一个应用程序,在某些时候我需要将来自 fb 的一堆数据与我的数据库同步,所以我(尝试)使用延迟作业将其推送到后台。这是我的 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))。我设置的 worker 甚至告诉我工作已成功完成:

1 个作业以 37.1777 j/s 的速度处理,0 个失败

然而,当我检查数据库中的用户时,他还没有更新他的好友列表。我做错了什么吗?非常感谢您的帮助,这让我发疯了。

最佳答案

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

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

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

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

关于ruby-on-rails - 延迟工作只是不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com