Ruby Rails 在后台工作 [resque + resque-status]

Ruby on Rails working in background [resque + resque-status]

我正在 rails 上使用 ruby 构建一个 Web 应用程序,它需要 运行 C++ exe 程序在后台运行。我为此比较了3个最常用的gem(Delayed_Jobs, Resque, Sidekiq),发现resque最适合我。

在 Countroller 中我有这样的创建方法

    def create
      @model = Model.create(model_params)
      # resque processe the file from the @model
      Resque.enqueue(JobWorker, @model.file.url)
      redirect_to model_path(@model.id)
    end

在工人class我有

    class JobWorker
      @queue = :file
      def perform file_to_process
        # calling time consuming C++ here which generates 2 image files.            
        system('my_file_processing_program "#{file_to_process}"')
      end
    end

现在我的问题是我应该如何检测该作业是否已完成? 我想在 C++ 应用程序生成图像后将生成的图像文件发送到客户端。 哪个用户可以 view/download.

As redirect_to model_path(@model.id) will return after Resque.enqueue(JobWorker, @model.file.url) in the create in控制器。

我尝试使用 resque-status,但这需要在控制器中轮询以检查状态,例如...

    while status = Resque::Plugins::Status::Hash.get(job_id) and !status.completed? && !status.failed?
      sleep 1
      puts status.inspect
    end

有什么建议吗??提前谢谢你...

如果你想要像 faye(http://faye.jcoglan.com/ruby.html) 这样的异步系统,那么你可以在进程完成时向前端发送消息。编写代码以在系统代码执行完毕后发布消息。

另一个简单的步骤(虽然对您来说可能不可行)是在过程结束时发送电子邮件。您可以向客户发送电子邮件,让他们知道 "that the process is complete visit link to see the result."