使用artisan命令以外的方式在Laravel 5中开启维护模式

31

当我的网站正在托管时,是否有可能在不使用php artisan up和down命令的情况下打开和关闭Laravel 5维护模式?

我所做的:

Route::get('site/shutdown', function(){
    return Artisan::call('down');
});

Route::get('site/live', function(){
    return Artisan::call('up');
}); 

第一条路线工作正常。但是当我调用site/live时,网站仍然关闭。这个问题可能是什么原因导致的?


你研究过任务调度了吗? - marblewraith
2
请查看此帖子。https://dev59.com/32Ei5IYBdhLWcg3wq97k - volkanozkan
1
只需在 storage/framework 中创建一个名为 down 的文件。已在 Laravel 5.1 上进行了测试。 - azeós
我已经更新了我的帖子。 - zlotte
我已经在类似的问题上写了答案(链接如上),请查看我的答案,它可以解决你的问题。https://dev59.com/32Ei5IYBdhLWcg3wq97k#38836871 - Kyslik
6个回答

70

如果您的项目已经停止,您不能调用另一个函数。

执行php artisan down后,会在storage/framework内创建一个名为down的文件。运行php artisan up后,该文件将被删除。

您可以手动在storage/framework内创建该文件,这将导致项目停止。当您想要再次启动项目时,只需删除该文件即可。


可以用路由来实现吗?我的意思是删除文件的路由? - zlotte

6

我觉得这里缺少正确的答案.. 你可以将你的路由添加到app/http/middleware/CheckForMaintenanceMode.php

protected $except = [
        //here
];

所以它永远不会关闭。


5

当你运行artisan down时,站点将不可用,因此当尝试调用站点时,你的IP无法访问站点。你必须使用你的IP例外来执行下线。

php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16

或者在本地添加::1。

为了让路由器不需要命令来实现这一点, 尝试将此命令保存在特定的位置并调用它。


3

Laravel 8在维护模式中引入了secret,您可以通过提供一个密钥来绕过维护模式,然后您的 Artisan :: call 将起作用。

您可以将路由添加到CheckForMaintenanceMode中间件中的 $except 变量中来绕过检查。然后您的 site / live 路由将正常工作。


2
为了使用URL使您的网站重新上线,您可以创建一个live.php文件并将其放置在Laravel的public文件夹中,然后访问http://your.domain/live.php
在live.php文件中,您需要添加类似于以下内容的代码:(如果您没有使用默认的public文件夹,请检查您的项目目录结构!)
<?php
unlink(dirname(__FILE__) . "/../storage/framework/down");
header("Location: your.domain"); 
die;

1

只是放置

Artisan::call('up');

没有路由功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接