2011-09-21 47 views
1

我想将一些会话控制器进程移动到Resque工作器中,以使日志记录更平滑。我想从这里移动部分:如何将此控制器代码移至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工人(是在/任务?)

#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 

添加我什么会话控制器初始化工人的工作吗?另外,因为它不再存在于会话中,current_user将是一个无对象。这是否意味着工人中的代码必须位于User循环中的用户中?

回答

1

我倾向于把它们放在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

+0

会给这个镜头。呃,不太确定。哎呦。你只是想介绍一下'fb_connections'符号吗? – Simpleton

+0

@Simpleton它的队列名称如果你还没有弄清楚。 – Autodidact

+0

@Millisami是的。很难理解我是如何不理解符号的。 – Simpleton