Отображать ответ после завершения задания - Задержанные задания - PullRequest
0 голосов
/ 19 июня 2020

Раньше у меня был класс контроллера, который создавал экземпляр службы и вызывал метод службы «синхронизировать», как показано ниже. После завершения метода 'synchronize' рельсы использовались для рендеринга сообщения JSON обратно в мой node.js.

if @service.valid_connection?
      @service.synchronize
      render json: {
        status: :unprocessable_entity,
        errors: @service.message
      }, status: :ok
    else
      render json: {
        status: :unprocessable_entity,
        errors: @event.errors.full_messages
      }, status: :ok
    end

Однако, поскольку мой метод 'synchronize' был немного долгим для выполнения, Я создал отложенное задание, которое берет на себя мою задачу «синхронизировать». Итак, в настоящее время мой контроллер выглядит так:

if @service.valid_connection?
      ::Events::WegSyncJob.perform_later(event_id, b_cancelled)
    else
      render json: {
        status: :unprocessable_entity,
        errors: @event.errors.full_messages
      }, status: :ok
    end

Теперь я не могу разместить здесь свой рендер JSON, поскольку он будет немедленно выполнен после того, как задание будет передано в delayed_job, я использую метод after_perform в мой класс Job как:

after_perform do |job|
    //below code is wrong
    render json: {
      status: :ok,
      message: "Check notifications"
    }, status: :ok
  end

  def perform(event_id, b_cancelled)
    //call to synchronize
  end

Однако я не могу вызвать «рендеринг» из моего класса Job, так как это возможно только с контроллера. Как я могу вернуть сообщение JSON в свой node.js (UI) после завершения этого фонового задания?

1 Ответ

0 голосов
/ 19 июня 2020

Шаг 1. После завершения отложенного задания ему необходимо будет сохранить вывод вашего метода синхронизации в базе данных.

Шаг 2 . На стороне «UI» напишите метод, который отправляет запрос GET на сервер через регулярные промежутки времени.

Шаг 3. Метод вашего контроллера проверяет базу данных и либо возвращает 'Nil', либо возвращает JSON объект вывода delayed_job.

...