如何在运行预定义的工匠命令时忽略控制台命令
Posted
技术标签:
【中文标题】如何在运行预定义的工匠命令时忽略控制台命令【英文标题】:How to ignore Console Command while running a pre defined artisan command 【发布时间】:2021-12-31 21:47:33 【问题描述】:我正在处理 CronJob 工作由控制台命令处理的项目。这些命令是手动开发的,用于在数据库上提供不同的作业。
但现在的问题是当我们运行时
php artisan cache:clear
它首先检查在控制台文件夹下创建的所有命令,然后运行cache:clear
命令。所以很明显这个命令运行得非常慢。因为它经历了手动创建的 15 个命令。
那么有没有办法在运行迁移、缓存、配置、查看命令时忽略那些手动命令。 这些命令只有在我们手动调用时才有效?
我已经检查过使用以下方法将其隐藏,但它没有工作
使用命令隐藏属性隐藏
class updateAPILogSync extends Command
protected $signature = 'apilog:update';
protected $description = 'Serve function to sync the log to migrant DB';
protected $hidden = true;
使用 setHidden 方法隐藏
class updateAPILogSync extends Command
protected $signature = 'apilog:update';
protected $description = 'Serve function to sync the log to migrant DB';
public function __construct()
parent::__construct();
$this->setHidden(true);
请指导我。我如何可以忽略此手动命令并加快预定义命令的速度
【问题讨论】:
【参考方案1】:请检查您的命令,看看这些作业是否正在从构造函数执行。
如果它是从构造函数加载的,那么它将在执行任何命令时运行。因为当我们从 cli 运行任何命令时,它会构建每个命令。所以只需将其移至handle()
而不是__construct()
【讨论】:
有效!!我的一个命令是由构造执行的。所以我把它改成了手柄,现在可以正常工作了【参考方案2】:您可以尝试自己实现它如何注册命令 https://laravel.com/docs/8.x/artisan#registering-commands
【讨论】:
以上是关于如何在运行预定义的工匠命令时忽略控制台命令的主要内容,如果未能解决你的问题,请参考以下文章
无法从工匠命令 Laravel/Lumen 进行 Crypt::decrypt
使用一个工匠命令制作模型、迁移和控制器,但控制器需要在不同的目录中