在 Sinatra 上启动某个进程,然后重定向回来(即使进程仍在运行)

发布于 2024-10-31 22:08:28 字数 238 浏览 0 评论 0原文

我有一个 ruby​​ 脚本,需要一些时间才能完成运行。我尝试运行此代码:

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

但发生的情况是,我的 Sinatra 脚本会等待该过程完成。如何执行该脚本,使其在后台运行,而我的 Sinatra 脚本只是重定向回来?

谢谢!

I have a ruby script which takes some fare amount of time to finish running. I have tried running this code:

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

But what happens is that, my Sinatra script then waits until the process is finished. How to execute that script so it is left to run in the background, and my Sinatra script just redirects back?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寒尘 2024-11-07 22:08:28

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

get "/run" do

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

    }

    redirect '/'
end

I encountered a similar problem, and below is what worked for me.

get "/run" do

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

    }

    redirect '/'
end
你列表最软的妹 2024-11-07 22:08:28

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

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

这对我有用。

You have to fork and detach the child process.

require 'rubygems'
require 'sinatra'

get "/" do
  "index"
end

get "/run" do
  Process.detach(fork{ exec "ruby script.rb &"})    
  redirect '/'
end

let's say script.rb is like

p "sleeping for 10 secs"
sleep(10)
p "woke up :)"

This works for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文