我想在新线程中运行Sinatra应用程序,以便也在脚本中运行其他内容,但是在执行此操作时:
require 'sinatra/base'
class App < Sinatra::Base
...some routes...
end
Thread.new do
App.run!
end
什么也没有发生,并且Sinatra服务器未启动。为了实现这一目标,我缺少什么吗?
最后,我在一个Thread中运行了另一个ruby进程,但是从Sinatra应用程序运行了,它工作得很好。
class App < Sinatra::Base
threads = []
threads <<
Thread.new do
Some::Other::Thing
rescue StandardError => e
$stderr << e.message
$stderr << e.backtrace.join("\n")
end
trap('INT') do
puts 'trapping'
threads.each do |t|
puts 'killing'
Thread.kill t
end
end
run!
end
并且我在退出Sinatra应用程序时添加了一个控件,它也会杀死打开的线程。