Как мне переместить этот код контроллера в задание восстановления?

Я хочу перенести некоторые из моих процессов контроллера сеансов в Resque worker, чтобы сделать вход в систему более плавным. Я хочу переместить части отсюда:

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

Что мне добавить в контроллер сеансов для инициализации этого рабочего задания? Кроме того, поскольку он больше не существует в сеансе, current_user будет нулевым объектом. Означает ли это, что код в работнике должен находиться в цикле for user в User?


person Simpleton    schedule 21.09.2011    source источник


Ответы (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: Почему вы набираете Class и End в верхнем регистре? о_О

person d11wtq    schedule 21.09.2011
comment
Дам это шанс. Эм, не совсем уверен. Ой. Не могли бы вы просто объяснить символ fb_connections? - person Simpleton; 21.09.2011
comment
@Simpleton - это имя очереди, если вы еще не поняли это. - person Autodidact; 09.01.2012
comment
@Millisami Ага. Трудно понять, как я тогда не понимал символов. - person Simpleton; 09.01.2012