gpt4 book ai didi

ruby - 如何将此 Controller 代码移动到 Resque 作业?

转载 作者:IT王子 更新时间:2023-10-29 06:16:10 26 4
gpt4 key购买 nike

我想将我的一些 session Controller 进程移动到 Resque 工作程序中,以使登录更加顺畅。我想从这里移动零件:

def create  
auth = request.env["omniauth.auth"]
omniauth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth,omniauth)

session[:user_id] = user.id
session['fb_auth'] = request.env['omniauth.auth']
session['fb_access_token'] = omniauth['credentials']['token']
session['fb_error'] = nil

@graph = Koala::Facebook::GraphAPI.new(current_user.token)
current_user.profile = @graph.get_object("me")
current_user.likes = @graph.get_connections("me", "likes")
current_user.friends = @graph.get_connections("me", "friends")
current_user.save
redirect_to root_url
end

进入 Resque worker(在/tasks 中吗?)

#ResqueFacebook.rb

require 'resque-retry'
Class FBResque
def self.perform()
@graph = Koala::Facebook::GraphAPI.new(current_user.token)
current_user.profile = @graph.get_object("me")
current_user.likes = @graph.get_connections("me", "likes")
current_user.friends = @graph.get_connections("me", "friends")
current_user.save
end
End

我要在 session Controller 中添加什么来初始化该辅助作业?此外,因为它不再存在于 session 中,所以 current_user 将是一个 nil 对象。这是否意味着 worker 中的代码必须在用户循环中的 for user 中?

最佳答案

我倾向于将它们放在 app/jobs/ 中,因为它在自动加载路径上,而 lib 往往更麻烦(尽管它完全有效) .

这应该足够了:

require 'resque-retry'

class FBConnectionsJob
@queue = :fb_connections

def self.perform(user_id)
user = User.find(user_id)
graph = Koala::Facebook::GraphAPI.new(user.token)
user.profile = graph.get_object("me")
user.likes = graph.get_connections("me", "likes")
user.friends = graph.get_connections("me", "friends")
user.save
end
end


def create
auth = request.env["omniauth.auth"]
omniauth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth,omniauth)

session[:user_id] = user.id
session['fb_auth'] = request.env['omniauth.auth']
session['fb_access_token'] = omniauth['credentials']['token']
session['fb_error'] = nil

Resque.enqueue(FBConnectionsJob, current_user.id)

redirect_to root_url
end

PS:为什么要用大写字母输入 ClassEnd? o_O

关于ruby - 如何将此 Controller 代码移动到 Resque 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496447/

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