Indicate to an ajax process that the delayed job has completed

元气小坏坏 提交于 2019-11-28 21:52:15

Typically, the best way to do this is to store, in your database, an indication of the job's progress. For instance:

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

So that when you enqueue the job:

User.update_attributes :calculation_status => 'enqueued'
User.send_later :perform_calculation

You can query, in your controller, the status of the job:

def check_status
  @user = User.find(params[:id])
  render :json => @user.calculation_status
end

You polling ajax process can then simply call check_status to see how the job is progressing, if it has succeeded or if it has failed.

With this gem you can have progress tracking directly on the Delayed::Job object itself: https://github.com/GBH/delayed_job_progress

Completed jobs are no longer automatically removed, so you can poll against a job until it comes back with completed state.

If you are using any JavaScript framework like prototypejs, then in the optional options hash, you usually provide a onComplete and/or onSuccess callback. API Reference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!