2015-06-06 86 views
0

我有一個check_delivery方法,它使用Sidekiq調用EasyPost api gem。Sidekiq返回作業ID

def check_delivery 
    if tracking_number.present? 
     EasypostWorker.perform_async(tracking_number) 
    end 
    end 

class EasypostWorker 
    include Sidekiq::Worker 

    def perform(tracking_number) 
    EasyPost.api_key = Rails.application.secrets.easypost_api_key 
    tracker = EasyPost::Tracker.create(tracking_code: tracking_number) 
    tracker.status 
    end 
end 

然而,這將返回24隨機字符Sidekiq作業標識,而不是跟蹤狀態(即「out_for_delivery」,「交付」等)

我在做什麼錯?

+1

這是因爲當調用'perform_async'時,它將它發送到後臺進程,並不立即執行它。你想要做什麼? – axsuul

+0

作爲@axsuul答案的補充,您可以使用[sidekiq-status](https://github.com/utgarda/sidekiq-status)跟蹤您的工作進展,並設置一個ajax輪詢以在您的用戶工作完成。 –

回答

1

check_delivery方法正在調用EasypostWorker,它返回了作業ID。

顯然,Sidekiq Worker不像常規的ruby類和方法那樣返回結果。

因此,我在模型中添加了status屬性,並更新了Worker中的屬性。