问题描述
||
我有一个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 :)\"
这对我有用。