2015-02-26 3 views
0

Я создаю webapp, используя ruby ​​on rails, для которого требуется запуск программ C++ exe в фоновом режиме. Я сравнил 3 наиболее часто используемых камня для этого (Delayed_Jobs, Resque, Sidekiq) и обнаружил, что resque является наиболее подходящим для меня.Ruby on Rails, работающий в фоновом режиме [resque + resque-status]

В 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 

В классе Worker у меня есть

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 

Теперь мой вопрос, как я должен определить, что работа завершена? Я хочу отправить gemerated image файл клиенту, как только изображения сгенерированы C++-приложением. , который пользователь может просмотреть/загрузить.

Как redirect_to model_path (@ model.id) вернется после Resque.enqueue (JobWorker, @ model.file.url) в create в контроллере.

Я попытался с помощью Resque-статус, но это требует опроса в контроллере, чтобы проверить состояние как ...

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

Любые предложения ?? Спасибо в Advance ...

ответ

1

Если вы хотите перейти в асинхронную систему, например, faye (http://faye.jcoglan.com/ruby.html), чтобы вы могли отправить сообщение в интерфейс, когда процесс будет завершен. Напишите код для публикации сообщения после завершения выполнения системного кода.

Еще один простой шаг, хотя для вас может оказаться невозможным отправить электронное письмо в конце процесса. Вы можете отправить электронное письмо клиенту, сообщив им, что «процесс завершен, чтобы увидеть результат».

+1

faye - это то, что я ищу прямо сейчас .. :) надеюсь решить его! Благодаря! – newbee

+0

Поскольку вы используете рельсы, вы можете найти этот драгоценный камень более полезным. https://github.com/jamesotron/faye-rails – coderhs

+0

@newbee, если решение правильно, примите ответ :) – coderhs