laravel维护模式 MaintenanceMode

当遇到Laravel接口报MaintenanceModeException错误时,发现应用进入了维护模式。维护模式在更新或维护期间可使应用暂时不可用,可通过Artisan命令`php artisan down`启用和`php artisan up`关闭。在维护模式下,所有请求会显示自定义视图,且队列任务暂停。了解如何自定义维护模式模板和使用Envoyer等工具实现零停机部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一天,做日常接口开发,突然接口不行了,报错:

[2020-02-15 15:12:57] local.ERROR: Handler:render {"class":"Illuminate\\Foundation\\Http\\Exceptions\\MaintenanceModeException","file":"D:\\qyPj\\OEM\\hans_online\\api-oem-test.qywww.com\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php","line":43,"message":"","code":0,"trace":""} 

马上找到vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php对应的43行:

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     *
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
     */
    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance()) {
            $data = json_decode(file_get_contents($this->app->storagePath().'/framework/down'), true);

            throw new MaintenanceModeException($data['time'], $data['retry'], $data['message']);
        }

        return $next($request);
    }
}

43行是: throw new MaintenanceModeException($data['time'], $data['retry'], $data['message']);

马上查了了这个CheckForMaintenanceMode模式,叫做维护模式,

查看文档:https://learnku.com/docs/laravel/5.5/configuration/1283#maintenance-mode

如下

维护模式

当应用程序处于维护模式时,所有对应用程序的请求都显示为一个自定义视图。这样可以在更新或执行维护时轻松地「关闭」你的应用程序。 维护模式检查包含在应用程序的默认中间件栈中。如果应用程序处于维护模式,则将抛出一个状态码为 503 的 MaintenanceModeException 异常。

要启用维护模式,只需执行下面的 Artisan 命令 down

php artisan down

你还可以向 down 命令提供 message 和 retry 选项。其中 message 选项的值可用于显示或记录自定义消息,而 retry 值可用于设置 HTTP 请求头中 Retry-After 的值:

php artisan down --message="Upgrading Database" --retry=60

要关闭维护模式,请使用 up 命令:

php artisan up

{tip} 你可以通过修改 resources/views/errors/503.blade.php 模板文件来自定义默认维护模式模板。

维护模式和队列

当应用程序处于维护模式时,不会处理 队列任务。而这些任务会在应用程序退出维护模式后再继续处理。

维护模式的替代方案

维护模式会导致应用程序有数秒的停机(不响应)时间,因此你可以考虑使用像 Envoyer 这样的替代方案,以便与 Laravel 完成零停机时间部署。

 

应该是我之前尝试artisan命令时,运行了php artisan down命令

运行php artisan up,接口项目又可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值