开始一些过程,然后在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 :)\"
这对我有用。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...