关于路由或控制器中执行 Artisan 命令

打扰各位了,请教一个问题,按照文档所说的,在路由或控制器中执行Artisan命令,返回500错误,是什么原因呢?
代码如下:

    Route::get('/config-cache', function() {
        $exitCode = Artisan::call('config:cache');
        return 'Config cache cleared';
    });

以上代码是文档中复制过来的。是还需要做其它的操作吗?

补充访问此路由返回信息如下图:

关于路由或控制器中执行 Artisan 命令

apache 日志出现如下提示:
[core:error] [pid 4292:tid 2208] [client 127.0.0.1:51132] End of script output before headers: index.php

原因找到了:
业务需要,在 App\Console\Kernel.php 中 schedule方法添加了一个 Artisan 任务调度。再使用 Artisan::call 的时候,也会调用 Kernel.php 中的 schedule 方法,不知为何执行这个方法会导致 500 错误;schedule 中代码如下:

    protected function schedule(Schedule $schedule)
    {
        $filepath = storage_path('logs/schedule');
        \File::isDirectory($filepath) or \File::makeDirectory($filepath, 0777, true, true);
        $schedule->command('command:lost_daka')->everyMinute()->appendOutputTo($filepath.'/data_'.date('YmdH').'.log')->runInBackground();
    }

注释掉 schedule 中添加的任务调度代码,再Artisan::call 则一切正常。请问一下各位,这样做是不对么?都是跟着文档上的来做的啊?

longren610
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 6

请确保是在 routes/web.php 下,我复制你的代码可以运行,可以把你的报错信息贴出来。

5年前 评论
longren610 (楼主) 5年前

500 错,可能也有成千上万种情况,,,你这跟问别人:我生病了,要怎么办?一样,,,没有任意意义啊,,,

5年前 评论
longren610 (楼主) 5年前
largezhou (作者) 5年前
longren610 (楼主) 5年前
longren610

@orh 请问一下,你复制过去,在web.php里面有做什么操作么?比如use某些类之类的。

5年前 评论

看看 Laravel 的日志呢

5年前 评论
longren610 (楼主) 5年前

第一、请确保你的路由能请求的到
第二、请确保你引入了门面下的Artisan,use Illuminate\Support\Facades\Artisan;

5年前 评论
longren610

@犯二青年 感谢回答。路由确实是能访问到的,只要把 $exitCode = Artisan::call('config:cache'); 注释掉,是能打印出后面的return 消息的。感觉就是Artisan调用的时候程序崩了。 引入 use Illuminate\Support\Facades\Artisan; 也没用,同样的返回500. :sweat_smile:

5年前 评论
犯二青年 5年前
longren610 (作者) (楼主) 5年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!