如何处理 Sinatra 中的陷阱
How to handle traps in Sinatra
我想捕获陷阱并需要在退出我的 Sinatra 应用程序之前执行自定义代码。我需要等到我的线程执行完成才能退出 Sinatra。
require 'sinatra'
trap('INT') do
puts "Trapped"
@th.join
exit(99)
end
get "/test" do
"Hello World!"
@th = Thread.new {sleep 30}
puts @th
end
如果我按下 Ctrl+C 它应该等到线程完成。
您可以在应用关闭前使用 at_exit
到 运行 代码。
如果您需要在 at_exit
中使用您在 运行 之前没有的变量,您可以尝试将它们设为全局变量。例如,
thread = nil
at_exit do
puts "Trapped"
thread.join if thread
exit(99)
end
require 'sinatra'
get "/test" do
"Hello World!"
thread = Thread.new {sleep 30}
puts thread
end
我想捕获陷阱并需要在退出我的 Sinatra 应用程序之前执行自定义代码。我需要等到我的线程执行完成才能退出 Sinatra。
require 'sinatra'
trap('INT') do
puts "Trapped"
@th.join
exit(99)
end
get "/test" do
"Hello World!"
@th = Thread.new {sleep 30}
puts @th
end
如果我按下 Ctrl+C 它应该等到线程完成。
您可以在应用关闭前使用 at_exit
到 运行 代码。
如果您需要在 at_exit
中使用您在 运行 之前没有的变量,您可以尝试将它们设为全局变量。例如,
thread = nil
at_exit do
puts "Trapped"
thread.join if thread
exit(99)
end
require 'sinatra'
get "/test" do
"Hello World!"
thread = Thread.new {sleep 30}
puts thread
end