ruby-on-rails 作业完成后返回响应-延迟作业

plupiseo  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(114)

前面我有一个控制器类,它创建了一个服务的示例,并调用服务方法“synchronize”,如下所示。在'synchronize'方法完成后,rails用于将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”方法执行起来有点长,我创建了一个延迟作业来执行我的“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后立即执行,我在Job类中使用after_perform方法:

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类调用“render”,因为它只能从控制器调用。在这个后台作业完成后,我如何将JSON消息呈现回我的node.js(UI)?

d6kp6zgx

d6kp6zgx1#

  • 步骤1.* 一旦你的延迟作业完成,它将不得不 * 保存 * 你的同步方法的输出到数据库。
  • 步骤2.* 在'UI'端,编写一个定期向服务器发送GET请求的方法。
  • 步骤3.* 你的控制器方法检查数据库,返回'Nil'或者返回delayed_job输出的JSON对象。
ogq8wdun

ogq8wdun2#

您必须从Job调用ApplicationController.render才能使渲染工作。

相关问题