私はphp artisan queue:work
を試しましたが、そのウェブサイトはフリーズしていませんでしたが、コントローラ経由でプログラムで実行するにはどうすればいいですか?私はArtisan:call('queue:work')
を実行しますが、(キューが終了するまで待ちます)フリーズし、ゲートウェイタイムアウトを終了しますが、キューは正常に実行されます。職人やシェルを使わずにLaravel Queueを実行するには?
提案がありますか?
私はphp artisan queue:work
を試しましたが、そのウェブサイトはフリーズしていませんでしたが、コントローラ経由でプログラムで実行するにはどうすればいいですか?私はArtisan:call('queue:work')
を実行しますが、(キューが終了するまで待ちます)フリーズし、ゲートウェイタイムアウトを終了しますが、キューは正常に実行されます。職人やシェルを使わずにLaravel Queueを実行するには?
提案がありますか?
は、あなたの場合は、あなたのコントローラ機能
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
を使用することによって、このプロセスを行うことをさせてください電子メールを送信するなどのタスクを後で行うことができます。
したがって、コントローラからキューワーカーを実行すると、実際にはキューの目的が無効になります。詳しくは正確なユースケースを説明してください。
ここではLaravel 5.5を使用しています。私はジョブをログに記録しようとしています(ジョブテーブルに保存されているものの読み込み可能な形式)info ** before **職人から実行すると削除されます)。そのために私はコントローラーからジョブキューを実行することを計画しました。私は間違っているかもしれません。データベース内の各ジョブを記録する方法があります。私はキュークラスメソッドからのロギングに失敗しました。私は間違っているかもしれません、どんな助けも歓迎です。 –