我有一個Rails應用程序3使用的delayed_job當用戶點擊網頁中抓取一些數據(一類方法)一個Ajax過程。 如何向ajax過程指示類方法已運行(以便我可以停止輪詢)?指示該延遲作業已完成
編輯:
爲了澄清,我希望在delayed_job的已經跑就知道了,當AJAX過程已經成功。然後我想將delayed_job完成狀態傳遞給正在運行的ajax進程。
我有一個Rails應用程序3使用的delayed_job當用戶點擊網頁中抓取一些數據(一類方法)一個Ajax過程。 如何向ajax過程指示類方法已運行(以便我可以停止輪詢)?指示該延遲作業已完成
編輯:
爲了澄清,我希望在delayed_job的已經跑就知道了,當AJAX過程已經成功。然後我想將delayed_job完成狀態傳遞給正在運行的ajax進程。
通常情況下,要做到這一點的最好辦法是存儲在數據庫中,作業進度的指示。例如:
class User
def perform_calculation
begin
self.update_attributes :calculation_status => 'started'
do_something_complex
self.update_attributes :calculation_status => 'success'
rescue Exception => e
self.update_attributes :calculation_status => 'error'
end
end
end
這樣當你排隊的工作:
User.update_attributes :calculation_status => 'enqueued'
User.send_later :perform_calculation
可以查詢,在你的控制器中,作業的狀態:
def check_status
@user = User.find(params[:id])
render :json => @user.calculation_status
end
您輪詢AJAX過程然後可以簡單地調用check_status來查看工作進展情況,成功情況或失敗情況。
如果您使用的是像prototypejs任何JavaScript框架,然後在可選選項哈希,你通常提供的onComplete和/或回調的onSuccess。 API Reference
但是,無論因爲工作剛剛入伍,這個電話會不會成功? – lightyrs 2011-02-18 14:25:25
有了這個寶石,你可以有進步直接Delayed::Job
對象本身追蹤:https://github.com/GBH/delayed_job_progress
已完成的作業不再自動刪除,所以你可以查詢對工作,直到它回來了completed
狀態。
潘是男人!謝謝你,這很有魅力。好主意。 – 2011-11-08 16:38:56