2017-11-30 6 views
1

Laravel에서 데이터베이스의 .sql 파일을 준비 서버에서 다운로드하여 프로덕션 서버 (요구 사항)에 붙여 넣는 명령을 만들었습니다. SSH로 프로덕션 서버에 액세스 할 수 없으므로 해당 명령에 대한 경로가 만들어지고 URL에서 실행됩니다. 여기에 내 코드가있다.Laravel 백그라운드에서 데이터베이스 테이블 다운로드

경로

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에서 명령을 내리면 모든 다운로드가 완료 될 때까지 페이지가 계속로드됩니다. 백그라운드에서 실행할 수 있습니까? 관리자가 admin 패널에서 버튼을 누르면 모든 파일 처리가 완료 될 때까지 기다리지 말고 프로세스가 시작되었다는 메시지를 표시 할 수 있으며 완료되면 알림을 보냅니다.

답변

0

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() { 
    \App\Jobs\DownloadFile::dispatch(); 
}); 
+0

감사 @cwang을 작업을 파견 생성 된 클래스의 장인 명령을 호출, 나는거야 내가 어떤 문제에 직면하면 알려 줘라. –

+0

Facing error "Class 'DownloadFile'not found"이런 식으로 수업을해야합니까? $ DownloadFile = App \ Jobs \ DownloadFile :: handle(); $ DownloadFile :: dispatch(); –

+0

발송 (new \ App \ Jobs \ DownloadFile())을 사용하여 정상적으로 작업하십시오. 하지만 그 작업이 성공적으로 실행되었는지 여부를 어떻게 알 수 있습니까? –