/** * @param Exception|Throwable $e * @return void */ private static function reportException($e) { Rails\ActionView\ActionView::clean_buffers(); $parmas = []; $params['status'] = $e instanceof Rails\Exception\ExceptionInterface ? $e->status() : 500; $params['report'] = Rails\Exception\Reporting\Reporter::create_report($e, $params); self::log()->message(Rails\Exception\Reporting\Reporter::cleanup_report($params['report'])); if (!self::application() || !self::application()->dispatcher()) { try { if (!self::application()) { self::_early_exception($e, $params['report']); } self::application()->setDispatcher(); } catch (Throwable $e) { self::_early_exception($e, $params['report']); } catch (Exception $e) { self::_early_exception($e, $params['report']); } } self::application()->dispatcher()->response()->headers()->status($params['status']); if (self::config()->action_controller->exception_handler && !self::config()->consider_all_requests_local) { try { self::$customExceptionHandlerRan = true; $handler = Rails\ActionController\ActionController::load_exception_handler(self::$config->action_controller->exception_handler, $params['status']); Rails::application()->set_controller($handler); $handler->handleException($e); } catch (Throwable $e) { self::_early_exception($e, $params['report']); } catch (Exception $e) { self::_early_exception($e, $params['report']); } } else { $renderer = new Rails\ActionController\Response\Error($e, $params); self::application()->dispatcher()->response()->headers()->contentType('html'); self::application()->dispatcher()->response()->body($renderer->render_view()->get_contents()); } self::application()->dispatcher()->respond(); exit; }