2017-09-06 9 views
1

私はphp artisan queue:workを試しましたが、そのウェブサイトはフリーズしていませんでしたが、コントローラ経由でプログラムで実行するにはどうすればいいですか?私はArtisan:call('queue:work')を実行しますが、(キューが終了するまで待ちます)フリーズし、ゲートウェイタイムアウトを終了しますが、キューは正常に実行されます。職人やシェルを使わずにLaravel Queueを実行するには?

提案がありますか?

答えて

0

は、あなたの場合は、あなたのコントローラ機能

use Symphony\Component\Process\Process; 
use Symfony\Component\Process\Exception\ProcessTimedOutException; 

try { 

$process = new Process(your artisan command, 
       null, 
       your environment, 
       [], 
       timeout(ex: 60000),[]); 

$process->run(); 

} catch (ProcessTimedOutException $e) { 

// you can show some flash message 

// OR 
return Response::json(['message' => 'some message'], 'desire response code'); 

} 

でこれを試してみてください、あなたは、いくつかのフォントエンドのハックを行うAJAXなど、このコントローラ機能を実行し、いくつかのロードを行う必要があります。そしてあなたの欲望の時間が過ぎたら、積み込みを止めてください。これが最善のアプローチではありません

、あなたはコントローラからqueueプロセスを実行しないでください、あなたはあなたのサーバがキューを使用すると、時間のかかる処理を延期することができsupervisor, etc… https://laravel.com/docs/5.1/queues#supervisor-configuration

1

を使用することによって、このプロセスを行うことをさせてください電子メールを送信するなどのタスクを後で行うことができます。

したがって、コントローラからキューワーカーを実行すると、実際にはキューの目的が無効になります。詳しくは正確なユースケースを説明してください。

+0

ここではLaravel 5.5を使用しています。私はジョブをログに記録しようとしています(ジョブテーブルに保存されているものの読み込み可能な形式)info ** before **職人から実行すると削除されます)。そのために私はコントローラーからジョブキューを実行することを計画しました。私は間違っているかもしれません。データベース内の各ジョブを記録する方法があります。私はキュークラスメソッドからのロギングに失敗しました。私は間違っているかもしれません、どんな助けも歓迎です。 –

関連する問題