2016-10-24 19 views
0

Hy!私は特定のアクション(ユーザーの作成など)でいくつかの電子メールを送信する必要があるアプリケーションを持っています。問題はそれらがバックグラウンドで実行されていない、代わりに私はプロセスが完了するまで待たなければならない、そして、それは私を別のページにリダイレクトする。 databaseのドライバをqueuesLaravel 5.2としています。 電子メールのための私のコードは、EXPのため、ユーザーの作成後:Laravelキュージョブがバックグラウンドで機能しない

WelcomeEmailがキューにプッシュされたジョブである
$this->dispatch(new WelcomeEmail($user)); 
Artisan::call('queue:work'); 

。このタイプのコードは、電子メールを送信するすべての場所に配置されます。なにが問題ですか?

答えて

3

まず、ディスパッチャ内の 'queue'コマンドにArtisan::callを使用したくない場合。

端末を開いて実行する:php artisan queue:listen --timeout=0 --tries=1とする必要があります。
次に、$ this-> dispatchまたはより良いディスパッチメソッドが呼び出されるページを訪問することができます。そのページ上のコードは次のようになります。
本番サーバーで dispatch(new WelcomeEmail($user));

は、あなたは確かにそれがアップし、すべての時間を実行していることを確認するために、あなたのphp artisan queue:listenコマンドを監視するためにsupervisordを使用する必要があります。

がさらに読書をご覧ください。

+0

しかし、スーパーバイザを使用したくない場合はどうすればよいですか?私はそれらをcronに入れることができますか? – EBuzila

+0

私は監督者と仕事をすることにしました。どうもありがとう! – EBuzila

+0

さて、あなたはsupervisordを使う必要はありません。デーモンオプションを使うこともできますが、コードにはいくつかの意味があります。正直なところ、スーパーバイザーを使うことは良いことであり、頭痛を軽減します。私が提供したリンクでより多くの情報を入手できます。問題はない、それは喜びだった。 –

0

https://laravel.com/docs/5.2/queuesが、私は同様の問題があったが、一つの仕事だったので、私はデーモンが常に実行したくなかった、また、更新コードの問題がある....だから私は次のように、PHPから直接コマンドを実行している解決:

のexec( 'nohupはPHPの/ my_folder /職人キュー:>を/ dev/null 2> --once仕事');

これは、1つのジョブを起動してから、結果を待たずに電源をオフにします。しかし、laravelのログファイルのアクセス権に注意してください。コンテキストや設定に応じてLinuxで動いている場合、ユーザは変更することができます。

誰かを助けることができる希望。

+0

コード/スクリプトをctrl-k(フルライン用)またはバックティック( '' ')でマークすることができます。うまくいけば、誰かが私にこのサイトのバックティックをエスケープする方法を教えて私にフォローアップすることができます:) – zzxyz

+0

私は私の電話で、ある日私はそれを編集する、ありがとう – Debugo

関連する問題