我有一个ruby脚本需要花费一些时间才能完成运行。我试过运行这段代码:
get "/run" do
exec "ruby #{"/home/user/script.rb"} &"
redirect '/'
end
但是会发生什么,然后我的Sinatra脚本会等待,直到完成该过程。如何执行该脚本以便它在后台运行,我的Sinatra脚本只是重定向回来?
谢谢!
答案 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 :)"
这适合我。