从Sidekiq worker

时间:2015-07-02 14:51:02

标签: ruby-on-rails json sidekiq

在我的rails应用中,我尝试将视频上传移至后台任务。我创建了一个Sidekiq工作者,但需要在任务结束时呈现JSON响应(我以前在控制器中完成的操作)。例如,这就是当前控制器的样子:

  # start sidekiq worker
  VideoUploaderWorker.perform_async(video_info)

  respond_to do |format|
      if @video.save        
        # add thumbnail image id to video
        @video.update_attributes(:image_id=>@image.id)

        # update project
        @video.project.touch

        format.js {
          if params[:video]
            render 'images/create'
          else
            logger.debug("sending JSON video id #{@video.id.to_json}")
            video_info = @video.id, @video.video_path_url
            render :json => video_info.to_json
          end
        }

      else
        Rails.logger "video save failed"
        Rails.logger.info(@video.errors.inspect)
        format.json { render :json => @video.errors, :status => :unprocessable_entity }
      end
    end
  end

如何从sidekiq后台作业渲染JSON?

1 个答案:

答案 0 :(得分:2)

你无法从sidekiq后台工作者渲染Json。

后台线程是队列,当服务器可以自由处理进程繁重的任务时,它将在后台运行。

当我们不希望用户等待进程结束时,它特别有用,而是将任务放入队列(稍后执行)。

示例用例,

  1. 发送电子邮件
  2. 上传文件
  3. 播放图像(压缩,调整大小,上传)
  4. 所以创建一个视频上传线程,发布你可以在控制器本身渲染一个json。