2016-10-24 2 views
0

Hy! У меня есть приложение, в котором я должен отправлять некоторые сообщения по определенным действиям (например, создание пользователей и т. Д.). Проблема в том, что они не работают в фоновом режиме, вместо этого я должен подождать, пока процесс не будет завершен, а затем перенаправит меня на другую страницу. Я использую database водитель с queues, Laravel 5.2. Моего код для электронной почты, для ехра, после создания пользователя:Работа в очереди Laravel не работает в фоновом режиме

$this->dispatch(new WelcomeEmail($user)); 
Artisan::call('queue:work'); 

где WelcomeEmail это работа, которая помещается в очереди. Этот тип кода размещается во всех местах, где я хочу отправить электронное письмо. Что не так?

ответ

3

Во-первых, вы не хотите использовать Artisan::call в командах «queue» внутри вашего диспетчера.

Вам следует открыть терминал и выполнить его: php artisan queue:listen --timeout=0 --tries=1, и вы должны это позволить.
Затем вы можете посетить страницу, на которой будет вызываться $ this-> dispatch or even better method. Код на этой странице должно быть:
dispatch(new WelcomeEmail($user));

На производственном сервере, вы должны использовать supervisord контролировать вашу команду php artisan queue:listen, чтобы убедиться, что это и работает все время.

Для дальнейшего чтения, пожалуйста, посетите: https://laravel.com/docs/5.2/queues

+0

Хорошо, но что, если я не хочу использовать супервизоров? Могу ли я положить их в cron? – EBuzila

+0

Я решил работать с супервизорами, и он работает! Большое спасибо! – EBuzila

+0

Ну, вам не нужно * использовать * superysord, вы можете использовать опцию daemon, но она имеет некоторые последствия для кода. Честно говоря, использование supervisord - хороший вызов, и это избавит вас от некоторых головных болей. Дополнительная информация доступна по ссылке, которую я предоставил. Нет проблем, это было удовольствие. –

0

У меня была аналогичная проблема, но потому, что была одна работа, которую я не хотел демон, чтобы всегда работать, также существует проблема обновления кода, .... Поэтому я решил выполнить команду непосредственно из PHP, например:

ехес ('поЬир PHP/my_folder/ремесленник очереди: работа --once>/DEV/нуль 2> ');

Это запустит одно задание, а затем выключится, не дожидаясь результата. Но будьте осторожны с разрешениями файла журнала laravel, o.s. пользователь может измениться, если вы работаете под Linux в зависимости от контекста и конфигурации.

Надеюсь, что это может помочь кому-то.

+0

Вы можете пометить код/​​скрипт ctrl-k (для полных строк) или с помощью обратного выступа ('' '). Надеюсь, кто-то может следить за мной, рассказывая мне, как избежать обратного хода на этом сайте :) – zzxyz

+0

Я нахожусь на своем телефоне, в один прекрасный день я его отредактирую, спасибо – Debugo

Смежные вопросы