Запустите некоторый процесс и затем перенаправьте обратно (даже если процесс все еще выполняется) на Sinatra - PullRequest
1 голос
/ 13 апреля 2011

У меня есть скрипт ruby, который занимает некоторое время, чтобы закончить работу. Я попытался запустить этот код:

get "/run" do
  exec "ruby #{"/home/user/script.rb"} &"
  redirect '/'
end

Но что происходит, мой сценарий Синатры ждет, пока процесс не закончится. Как выполнить этот сценарий, чтобы он оставался работать в фоновом режиме, а мой сценарий Sinatra просто перенаправляет обратно?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 11 июля 2011

Я столкнулся с подобной проблемой, и вот что сработало для меня.

get "/run" do

    task = Thread.new { 
        p "sleeping for 10 secs"
        sleep(10)
        p "woke up :)"

    }

    redirect '/'
end
3 голосов
/ 13 апреля 2011

Вы должны разорвать и отсоединить дочерний процесс.

require 'rubygems'
require 'sinatra'

get "/" do
  "index"
end

get "/run" do
  Process.detach(fork{ exec "ruby script.rb &"})    
  redirect '/'
end

Допустим, script.rb похож на

p "sleeping for 10 secs"
sleep(10)
p "woke up :)"

Это работает для меня.

...