2017-11-30 7 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+のファイルがあり、そのうちのいくつかは、サイズが10メガバイト以上のもの。私のコマンドはSSH(管理者)とURLからうまく機能します。しかし、問題はURLからコマンドを打つと、すべてのダウンロードが完了するまでページがロードされ続けることです。 これをバックグラウンドから実行する方法はありますか?管理者パネルの管理者がボタンを押すと、すべてのファイルが終了し、プロセスが開始されたことを通知するメッセージを表示することができ、完了したら通知が表示されます。

答えて

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、I'LLを仕事を派遣生成されたクラスで職人コマンドを呼び出します私が何か問題に直面したらあなたに知らせてください。 –

+0

面倒なエラー「Class 'DownloadFile' not found」このようなことによってクラスを呼び出す必要はありますか? $ DownloadFile = App \ Jobs \ DownloadFile :: handle(); $ DownloadFile :: dispatch(); –

+0

ディスパッチ(new \ App \ Jobs \ DownloadFile())でうまく動作します。そのジョブが正常に実行されたかどうかはどのようにわかりますか? –

関連する問題