2016-10-24 2 views
0

Hy! 특정 작업 (예 : 사용자 생성 등)에서 일부 전자 메일을 보내야하는 응용 프로그램이 있습니다. 문제는 백그라운드에서 실행되고 있지 않고 대신 프로세스가 완료 될 때까지 기다린 다음 다른 페이지로 리디렉션됩니다. queues, Laravel 5.2과 함께 database 드라이버를 사용합니다. 사용자 생성 후 특급 이메일에 대한 나의 코드 : WelcomeEmail가 큐에 밀어 작업입니다Laravel 대기열 작업이 백그라운드에서 작동하지 않습니다.

$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를 사용하려면 * 필요하지 않습니다. 데몬 옵션을 사용할 수는 있지만 코드와 관련이 있습니다. 솔직히 supervisord를 사용하는 것이 좋으며 두통을 덜어줍니다. 내가 제공 한 링크에서 더 많은 정보를 얻을 수 있습니다. 문제 없습니다, 즐거움이었습니다. –

0

https://laravel.com/docs/5.2/queues 나는 비슷한 문제를 가지고 있지만, 단일 작업 이었기 때문에 나는 데몬이 항상 실행하지 않았다, 또한 업데이트 코드 문제가있다 .... 그래서 PHP 같은 명령을 다음과 같이 직접 실행 해 보겠습니다.

exec ('nohup php/my_folder/artisan queue : work -once>/dev/null 2> ');

결과를 기다리지 않고 하나의 작업을 시작한 다음 전원을 끕니다. 그러나 laravel 로그 파일 사용 권한 o.s에주의하십시오. 사용자는 컨텍스트 및 구성에 따라 Linux에서 실행중인 경우 변경할 수 있습니다.

누군가를 도울 수있는 희망.

+0

코드/스크립트를 ctrl-k (전체 줄) 또는 backtick ('')으로 표시 할 수 있습니다. 다행히도 누군가가 나에게이 사이트에서 백틱을 피하는 방법을 알려줌으로써 후속 조치를 취할 수있다. – zzxyz

+0

나는 내 전화에있어, 언젠가 나는 그것을 고치겠다. 고마워. – Debugo

관련 문제