2013-03-13 5 views
0

어떤 시점에서 fb의 데이터를 데이터베이스와 동기화해야하는 응용 프로그램을 구축 중이므로 지연된 작업을 사용하여 백그라운드로 밀어 넣으려고합니다 (attemtping). Delayed Job 클래스의 일부분은 다음과 같습니다. lib/RsvpHelper.rb에서 RsvpHelper 수준의 생활로지연된 작업이 작동하지 않습니다.

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 

. 그래서 내 신청서의 어느 시점에서 유효한 유효 사용자로 Delayed::Job.enqueue(FbSyncJob.new(user.id))으로 전화합니다. 심지어 설정 작업자는 작업이 성공적으로 완료되었음을 알려줍니다 :

1 jobs processed at 37.1777 j/s, 0 failed

을하지만 나는 그가 그의 친구 목록을 업데이트했다되지 않은 데이터베이스에서 사용자를 확인할 때. 내가 뭐 잘못 했나? 뭐? 도움을 많이 주셔서 감사 드리며 이로 인해 저를 미치게했습니다.

답변

2

Delayed::Job.enqueue는 지연 작업 테이블에 레코드를 넣어 것입니다,하지만 당신은 (방법을 수행)

일반적으로 개발이 될 것이라고 작업 코드를 실행할 수있는 별도의 프로세스를 실행하는 데 필요한 bundle exec rake jobs:work (참고 :이를 다시 시작해야합니다 자동 부하 변동)

를 참조 나는 보통 내 지연 사기에 다음을 넣어, 당신은 코드를 변경 작업 언제든지 레이크가되지 않습니다 개발 비 유적있는 동안 -이 지연된 작업 테이블에 레코드를두고 결코 (구성 참조 코드

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

+1

이 읽기 ​​쉬울 것'지연 :: Worker.delay_jobs = Rails.env.production' – Lane

+1

@Lane - 환경 준비에 대해 무엇을? – house9

관련 문제