Rails не рендерится перед выполнением следующей команды

Я использую Rails 4 и хочу выполнить скрипт Python после редактирования контроллера.

Я сделал:

 if @a_serverconfiguration.update(a_serverconfiguration_params)
    format.html { redirect_to @a_serverconfiguration, notice: 'Device configuration was successfully updated. Next time, you have to access to new ip configuration. Rebooting device, this would take a while...' }
   format.json { render :show, status: :ok, location: @a_serverconfiguration }
Thread.new do      
    exec "sudo python /home/pi/Desktop/starting.py"
end
  else
    format.html { render :edit }
    format.json { render json: @a_serverconfiguration.errors, status: :unprocessable_entity }
  end
end

Но я не вижу свою страницу показа перед выполнением скрипта Python. Этот сценарий перезагружается через 10 секунд, поэтому, когда пользователь обновляет контроллер, не отображается сообщение «Конфигурация устройства успешно обновлена». В следующий раз вам нужно будет получить доступ к новой конфигурации IP. Перезагрузка устройства, это займет некоторое время...». Webrick ждет 10 секунд и идет вниз.

Я пробовал с Webrick и тонким, и оба делают то же самое.


person Celia Moreno Jiménez    schedule 31.07.2014    source источник


Ответы (1)


Если я хорошо понимаю: вы хотите, чтобы ваш контроллер отобразил ответ до того, как ваш скрипт Python будет завершен.

Использование потоков позволяет запускать несколько блоков кода одновременно, я думаю, вы хотите выполнить свой скрипт Python как фоновое задание.

Вместо использования Thread взгляните на [delayed_job gem][1]. Этот драгоценный камень инкапсулирует и выполняет более длительные задачи в фоновом режиме.

person Yann VERY    schedule 31.07.2014