温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ruby - Running Sinatra app inside Thread doesn't work
ruby sinatra

ruby - 在Thread中运行Sinatra应用程序不起作用

发布于 2020-03-31 23:39:20

我想在新线程中运行Sinatra应用程序,以便也在脚本中运行其他内容,但是在执行此操作时:

require 'sinatra/base'

class App < Sinatra::Base
...some routes...
end

Thread.new do
  App.run!
end

什么也没有发生,并且Sinatra服务器未启动。为了实现这一目标,我缺少什么吗?

查看更多

提问者
xmarston
被浏览
17
xmarston 2020-01-31 19:55

最后,我在一个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应用程序时添加了一个控件,它也会杀死打开的线程。