Укажите процессу ajax, что отложенное задание завершено - PullRequest
8 голосов
/ 18 февраля 2011

У меня есть приложение Rails 3, которое использует delayed_job для извлечения некоторых данных (с помощью метода класса), когда пользователь заходит на страницу. Как я могу указать процессу ajax, что метод класса был запущен (чтобы я мог остановить опрос)?

EDIT:

Чтобы уточнить, я хочу знать, когда запускается delayed_job, а не когда процесс ajax завершился успешно. Затем я хочу передать завершенное состояние delayed_job запущенному процессу ajax.

Ответы [ 3 ]

13 голосов
/ 20 февраля 2011

Как правило, лучший способ сделать это - сохранить в своей базе данных информацию о ходе выполнения задания. Например:

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, чтобы увидеть, как продвигается задание, успешно ли оно выполнено или не удалось.

0 голосов
/ 27 февраля 2016

С этим камнем вы можете отслеживать прогресс непосредственно на самом объекте Delayed::Job: https://github.com/GBH/delayed_job_progress

Завершенные задания больше не удаляются автоматически, поэтому вы можете опрашивать их, пока они не появятся.назад с completed состоянием.

0 голосов
/ 18 февраля 2011

Если вы используете какой-либо фреймворк JavaScript, например prototypejs, в хэше необязательных параметров вы обычно предоставляете обратный вызов onComplete и / или onSuccess. Справочник по API

...