我在Laravel中创建了一个命令,它从登台服务器下载(复制)数据库的.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(管理员)和URL工作。但是问题是当我从URL命中命令时,页面一直加载到所有下载完成。 有没有办法从后台执行此操作?因此,如果管理员点击来自管理面板的按钮,他/她不应该一直等到应对所有文件完成后我可以显示消息流程已经开始,您将在完成后通知。
答案 0 :(得分:0)
Laravel为您的用例提供队列。
https://laravel.com/docs/5.5/queues
运行php artisan make:job DownloadFile
然后在生成的类中调用artisan命令
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Artisan::call('importDatabase:staging', ['tables' => 'all']);
}
然后在你的路线上发送工作
Route::get('console/import_all', function () {
\App\Jobs\DownloadFile::dispatch();
});