我已经在laravel中创建了命令,从staging服务器下载(复制)数据库的.sql文件并将其粘贴到生产服务器上(需求)。我没有SSH访问生产服务器的访问,因此为该命令创建了路由并从URL执行它。这是我的代码。
路由
Route::get('console/import_all',
function () {
Artisan::call('importDatabase:staging', ['tables' => 'all']);
});
命令函数
private function downloadFile($url, $path)
{
sleep(5);
return copy($url, $path);
}
现在大约有30多个文件,其中一些文件的大小超过10MB。我的命令从SSH(通过Admin)和URL工作正常。但是问题是当我从URL命令命令时,页面一直在加载直到所有下载完成。是否有任何方法可以从后台执行此操作?过程已经开始,您将通知一旦完成。
laravel为您的用例提供队列。
https://laravel.com/docs/5.5/queues
运行php artisan make:job DownloadFile
然后在生成类中调用工匠命令
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Artisan::call('importDatabase:staging', ['tables' => 'all']);
}
然后在您的路线上派遣作业
Route::get('console/import_all', function () {
AppJobsDownloadFile::dispatch();
});