【问题标题】:Laravel: Calling Artisan command from controller not working properlyLaravel:从控制器调用 Artisan 命令无法正常工作
【发布时间】:2021-02-24 18:18:26
【问题描述】:

当我遇到特定路线时,我正在尝试备份我的数据库。 首先我做了工匠命令: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 Illuminate\Support\Facades\Artisan;

  public function backupDB{
     Artisan::call("backupDB");
  }

当我击中路线时,它会打印回声,但没有发生其他任何事情。就是这样。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    所以,我找到了解决方案。将命令包装在作业中,或者将代码放入该作业中,然后启动队列。通过这样做,当我尝试到达路线时,代码可以正常工作。

     php artisan make:job backupDB
    

    它将在 app>jobs 文件夹中创建一个文件 然后将代码放入handle()函数中。

    接下来只需调用控制器或路由中的作业

    use App\Jobs\backupDB;
    
    public function backup()
    {
        $process = new pull();
        dispatch($process);
    }
    

    你需要设置队列,这里是docs

    【讨论】:

      【解决方案2】:

      您无需重新发明轮子。只需使用this extension

      PS:我无法解释您面临的问题,因为您没有提供任何调试信息:日志、回溯或类似的东西。

      PS2:注意exec()函数的使用

      【讨论】:

      • 我需要通过控制器或路由备份我的数据。当我使用该扩展程序时,它在 cli 中运行良好,但是当您从控制器或路由调用它时,再次没有发生任何事情。同样的问题也出现在另一个问题here
      猜你喜欢
      • 2017-06-13
      • 2017-10-14
      • 2016-05-09
      • 2017-04-02
      • 2016-07-30
      • 2013-07-26
      • 2015-09-26
      • 2019-09-22
      • 1970-01-01
      相关资源
      最近更新 更多