如何捕获机架应用程序的终止

时间:2015-03-22 02:12:55

标签: ruby sinatra rack celluloid

我运行了一个Sinatra应用程序,并且使用Celluloid运行了一些后台线程。当按下 Ctrl + C 时,我想干净地终止那些正在运行的代理。我如何干净地终止它们?

1 个答案:

答案 0 :(得分:1)

要直接回答您的问题,您的主线程将在Sinatra运行时阻塞;一旦它捕获了SIGINT,它就会突破它的runloop,你的脚本将会继续。所以,你可以有一个config.ru,如:

require './my_app'
run MyApp
Celluloid.shutdown

run将一直阻塞,直到服务器终止,此时Celluloid应该启动其关闭机制。

然而,这就是说,值得注意的是Celluloid将通过#shutdown块自动调用at_exit。 (https://github.com/celluloid/celluloid/blob/master/lib/celluloid.rb#L138-L154)和赛璐珞已经provides a mechanism for running code when an actor exits,所以如果你为演员定义了终结者,他们应该干净地关闭,而不必做任何特殊的WRT Sinatra。