Run background process in Sinatra

2019-05-14 00:32发布

问题:

I have got Sinatra/Rails app and an action which starts some long process.

Ordinary I make a queue for background jobs. But this case is too simple and background process starts very rarely, so queue is an overhead.

So how could I run background process without queue?

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

I've tried to make it as a new Thread or Process fork, but it didn't help.

回答1:

I have had success with this (simplified) in Sinatra:

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

This returns the Process ID, which you can use to terminate the process later if you need. Also, this is on Linux, it will not work on Windows.