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

Ruby 在Sinatra上启动一些进程,然后重定向回(即使进程仍在运行),ruby,process,background,sinatra,Ruby,Process,Background,Sinatra,我有一个ruby脚本,它需要一些时间来完成运行。我已尝试运行以下代码: get "/run" do exec "ruby #{"/home/user/script.rb"} &" redirect '/' end 但是发生的是,我的Sinatra脚本然后等待,直到过程完成。如何执行该脚本,让它在后台运行,而我的Sinatra脚本只是重定向回来 谢谢 您必须分叉并分离子进程 require 'rubygems' require 'sinatra' get "/" do "i

我有一个ruby脚本,它需要一些时间来完成运行。我已尝试运行以下代码:

get "/run" do
  exec "ruby #{"/home/user/script.rb"} &"
  redirect '/'
end
但是发生的是,我的Sinatra脚本然后等待,直到过程完成。如何执行该脚本,让它在后台运行,而我的Sinatra脚本只是重定向回来


谢谢

您必须分叉并分离子进程

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

这对我很有用。

您必须分叉并分离子进程

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

这对我有效。

我遇到了类似的问题,下面是对我有效的方法

get "/run" do

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

    }

    redirect '/'
end

我遇到了一个类似的问题,下面是对我有效的方法

get "/run" do

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

    }

    redirect '/'
end

可能的重复:我试过了,它有相同的效果可能的重复:我试过了,它有相同的效果实际上它对我不起作用,但它在一个简单的脚本中工作。。。发生的事情是浏览器等待页面响应,在终端中你可以看到脚本的输出实际上它对我不起作用,但它在普通脚本中起作用。。。发生的情况是浏览器等待页面响应,在终端中可以看到脚本的输出