【问题标题】:Run background process in Sinatra在 Sinatra 中运行后台进程
【发布时间】:2012-03-29 00:27:21
【问题描述】:

我有 Sinatra/Rails 应用程序和一个开始一些漫长过程的操作。

通常我为后台作业排队。但是这种情况太简单了,后台进程很少启动,所以队列是一种开销。

那么我怎样才能在没有队列的情况下运行后台进程呢?

get "/build_logs/:project" do
  LogBuilder.new(params[:project]).generate
  "done"
end

我尝试将其作为新的线程或进程分支,但没有帮助。

【问题讨论】:

  • 我被永远推荐过一次。它不是特定于轨道的,它很轻。

标签: ruby-on-rails ruby background sinatra


【解决方案1】:

我在 Sinatra 中成功地使用了这个(简化):

get '/start_process'
  @@pid = Process.spawn('external_command_to_run')
end

这将返回进程 ID,您可以在以后需要时使用它来终止进程。另外,这是在 Linux 上运行的,它不适用于 Windows。

【讨论】:

  • 您可能正在寻找您的服务器返回而不等待子进程终止 - 这是一个相当典型的用例。如果您不希望僵尸进程填充您的系统(我曾经在几个月的僵尸进程占用了进程映射空间后看到服务器崩溃),您还应该在 spawned 之后添加 Process.detach @@pid .
猜你喜欢
  • 2023-03-10
  • 2021-04-06
  • 2012-11-26
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多