当我遇到一条特殊的路由时,我正试图备份我的数据库。首先我制作了工匠命令:php artisan backupDB
这是功能:
echo "Generating backup file..n";
$filename = "backup-" . Carbon::now()->format('Y-m-d-H-i-s') . ".sql";
$command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . " > " . storage_path() . "/app/backup/" . $filename;
$returnVar = NULL;
$output = NULL;
exec($command, $output, $returnVar);
echo "Backup file path: ".storage_path() . "/app/backup/".$filename;
我在cli中运行它,它运行得很好。然后当我试图通过控制器运行它时:
use IlluminateSupportFacadesArtisan;
public function backupDB{
Artisan::call("backupDB");
}
当我到达路线时,它会打印出回声,但没有发生其他事情。仅此而已。
所以,我找到了一个解决方案。将命令封装在作业中,或者只将代码放入该作业中,然后启动队列。通过这样做,当我试图达到路线时,代码工作得很好。
php artisan make:job backupDB
它将在应用程序内创建一个文件>作业文件夹然后将代码放入CCD_ 2函数中。
接下来只需调用控制器内的作业或路由
use AppJobsbackupDB;
public function backup()
{
$process = new pull();
dispatch($process);
}
你需要设置队列,这是文档
您不需要重新发明轮子。只需使用此扩展即可。
PS:我无法解释你面临的问题,因为你没有提供任何调试信息:日志、回溯或类似的smth。
PS2:小心exec()
函数使用