我有一个Rails 5应用程序(API)和一个postgres DB,它们运行在不同的docker容器上,所有这些都在同一个AWS EC2实例上,并由外部管理器(manage)控制。 manage 需要能够向 API 发出请求并告诉它退出。我不想只是从外部杀死API或停靠器容器,因为我希望所有 API 请求完成。我希望 API 优雅地退出,只有它知道如何做到这一点 Ruby有退出,退出!并且中止。所有这些似乎都由Rails处理,因为例外和Rails只是继续开车。
如何从内部终止我的rails应用程序?我可以提出某种不可处理的例外吗?
答案 0 :(得分:2)
ApplicationController很可能正在抢救SystemExit。查看Rails源代码,ActionController中有一个rescue Exception
,其中包含ActiveSupport :: Rescuable。这就是定义rescue_from
等控制器方法的地方。
我在Rails API应用程序的控制器中测试了它,向它发送了一个请求,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