启动一些进程,然后在Sinatra上重定向(即使进程仍在运行)

时间:2011-04-13 16:49:01

标签: ruby process background sinatra

我有一个ruby脚本需要花费一些时间才能完成运行。我试过运行这段代码:

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

但是会发生什么,然后我的Sinatra脚本会等待,直到完成该过程。如何执行该脚本以便它在后台运行,我的Sinatra脚本只是重定向回来?

谢谢!

2 个答案:

答案 0 :(得分:4)

我遇到了类似的问题,下面是对我有用的。

get "/run" do

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

    }

    redirect '/'
end

答案 1 :(得分:3)

您必须分叉并分离子进程。

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 :)"

这适合我。