从内部优雅地终止Rails应用程序

我有一个Rails 5应用程序(API)和postgres数据库,它们在不同的docker容器上运行,都在同一个AWS EC2实例上,并由外部pipe理器(manage)进行控制。 pipe理需要能够向API发出请求并告诉它退出。 我不想只是杀死外部API或Docker容器,因为我想要完成所有的API请求。 我希望API能够优雅地退出,只有它知道如何做到这一点。
ruby已经退出,退出! 并中止。 所有这些似乎都被Rails作为例外来处理,Rails只是继续开着。

我怎样才能从内部终止我的rails应用程序? 我能提出一些不可解决的例外情况吗?

ApplicationController最有可能拯救SystemExit。 查看Rails源代码,在ActionController中有一个rescue Exception ,其中包括ActiveSupport :: Rescuable。 这就是像rescue_from这样的控制器方法的定义。

我在一个Rails API应用程序的控制器中testing了这个,发送了一个请求,而Rails确实立即退出,对调用者有一个空的响应:

 class ProcessesController < ApplicationController rescue_from SystemExit, with: :my_exit def destroy CleanupClass.method_that_exits render json: { status: :ok } end def my_exit exit! end end class CleanupClass def self.method_that_exits exit end end