异常
某天半夜被领导电话叫起来修bug遇到的问题, 起因是写代码的时候在 IDE 里手动创建了个 Command 文件, 并没有用 artisan make:command
指令生成, 本地开发过程中一直没有任何问题, 结果线上报错如下:
[2019-07-1600:00:02]local.ERROR:ReflectionException:Class App\Console\Commands\xxxCommand does not exist in/www/xxx/vendor/laravel/framework/src/Illuminate/Container/Container.php:729
Stacktrace:
#0/www/xxx/vendor/laravel/framework/src/Illuminate/Container/Container.php(729):ReflectionClass->__construct('App\\Console\\Com...')
#1/www/xxx/vendor/laravel/framework/src/Illuminate/Container/Container.php(608):Illuminate\Container\Container->build('App\\Console\\Com...')
#2/www/xxx/vendor/laravel/framework/src/Illuminate/Container/Container.php(575):Illuminate\Container\Container->resolve('App\\Console\\Com...')
#3/www/xxx/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(728):Illuminate\Container\Container->make('App\\Console\\Com...')
#4/www/xxx/vendor/laravel/framework/src/Illuminate/Console/Application.php(192):Illuminate\Foundation\Application->make('App\\Console\\Com...')
#5/www/xxx/vendor/laravel/framework/src/Illuminate/Console/Application.php(206):Illuminate\Console\Application->resolve('App\\Console\\Com...')
#6/www/xxx/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(285):Illuminate\Console\Application->resolveCommands(Array)
#7/www/xxx/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122):Illuminate\Foundation\Console\Kernel->getArtisan()
#8/www/xxx/artisan(35):Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput),Object(Symfony\Component\Console\Output\ConsoleOutput))
#9{main}
解决
命令行运行如下指令:
composer dump-autoload
原因
在运行 artisan make:command
或 artisan make:seeder
的时候, 会执行如下:
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
parent::handle();
$this->composer->dumpAutoloads();
}
可以看到处理完操作后会主动执行 dumpAutoloads()
重新编译自动加载文件.
总结
真是血的教训, 半夜被电话叫醒修bug, 为啥是半夜才出这个问题呢, 因为程序中有 schedule
执行的其他的 command 在凌晨执行, 所以我这次添加的新的 command 并没有影响到 Laravel 中 HTTP 容器的相关业务, 只有 Console 容器受到影响, 而凌晨的 定时任务 无疑就成为了 定时炸弹.
本文由 root 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Dec 27, 2019 at 07:09 pm