Запуск приложения Sinatra внутри Thread не работает - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь запустить приложение Sinatra в новом потоке, чтобы также запустить что-то другое в моем скрипте, но когда я делаю:

require 'sinatra/base'

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

Thread.new do
  App.run!
end

Ничего не происходит, и сервер Sinatra не запускается. Что-то мне не хватает, чтобы этого добиться?

1 Ответ

0 голосов
/ 31 января 2020

Наконец, я запускаю другой процесс 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 закрывается, также уничтожает открытый поток.

...