2013-03-13 195 views
0

我正在建立一個應用程序,在某些時候我需要從fb與我的數據庫同步一堆數據,所以我(試圖)使用延遲作業來將其推入背景。這是我的延遲作業類的一部分。延遲工作只是不工作

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))。我設置了,即使這名工人告訴我,這項工作已成功完成:

1 jobs processed at 37.1777 j/s, 0 failed

然而,當我在他已經沒有他的朋友列表更新數據庫檢查該用戶。我做錯了什麼?非常感謝這幫助我一直讓我瘋狂。

回答

2

Delayed::Job.enqueue將會把記錄在延遲作業表,但你需要運行一個單獨的進程來執行這項工作的代碼(執行方法)

通常在發展,這將是bundle exec rake jobs:work(注意:必須重新啓動此耙任務,任何時候你修改代碼,它不會自動負載變化)

我通常把下列我延遲CON成形,而在發展 - 這從來沒有把在延遲工作表中的記錄和同步運行所有後臺代碼(開發中),默認情況下軌會重新修改了代碼

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

+1

這將是更容易閱讀:'延遲:: Worker.delay_jobs = Rails.env.production' – Lane 2014-02-12 15:44:50

+1

@Lane - 有關暫存環境是什麼? – house9 2014-02-12 16:46:07