开始一些过程,然后在Sinatra上重定向回即使过程仍在运行

问题描述

|| 我有一个ruby脚本,需要花费一些时间才能完成运行。我尝试运行此代码
get \"/run\" do
  exec \"ruby #{\"/home/user/script.rb\"} &\"
  redirect \'/\'
end
但是发生的是,我的Sinatra脚本然后等待该过程完成。如何执行该脚本,使其在后台运行,而我的Sinatra脚本只是重定向回去? 谢谢!     

解决方法

我遇到了类似的问题,下面是对我有用的方法。
get \"/run\" do

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

    }

    redirect \'/\'
end
    ,您必须分叉并分离子进程。
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 :)\"
这对我有用。