Ruby on rails 向ajax进程指示延迟的作业已完成

Ruby on rails 向ajax进程指示延迟的作业已完成,ruby-on-rails,ajax,comet,delayed-job,polling,Ruby On Rails,Ajax,Comet,Delayed Job,Polling,我有一个Rails 3应用程序,当用户点击页面时,它使用delayed_job获取一些数据(使用类方法)。 如何向ajax进程指示类方法已运行(以便停止轮询) 编辑: 为了澄清,我想知道延迟的_作业何时运行,而不是ajax进程何时成功。然后我想将延迟的作业完成状态传递给正在运行的ajax进程。如果您使用的是prototypejs之类的JavaScript框架,那么在可选选项哈希中,您通常会提供onComplete和/或onSuccess回调 通常,最好的方法是在数据库中存储作业进度指示。例如:

我有一个Rails 3应用程序,当用户点击页面时,它使用delayed_job获取一些数据(使用类方法)。 如何向ajax进程指示类方法已运行(以便停止轮询)

编辑:


为了澄清,我想知道延迟的_作业何时运行,而不是ajax进程何时成功。然后我想将延迟的作业完成状态传递给正在运行的ajax进程。

如果您使用的是prototypejs之类的JavaScript框架,那么在可选选项哈希中,您通常会提供onComplete和/或onSuccess回调

通常,最好的方法是在数据库中存储作业进度指示。例如:

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

然后,您可以简单地调用check_status来查看作业的进度,无论它是成功的还是失败的。

使用此gem,您可以直接在
Delayed::job
对象本身上进行进度跟踪:


已完成的作业不再自动删除,因此您可以对作业进行轮询,直到作业返回
Completed
状态。

但是无论发生什么情况,调用都不会成功,因为作业刚刚排队?潘就是那个人!谢谢你,伙计,这很有魅力。好主意。