[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Roberto Noya
Criador Roberto Noya 15/06/2022

Olá Carlos,

 

Sobre o uso do Redis em Queue.

 

Estou usando Laravel 9 com setup Docker sugerido no curso.

Criei um Job “App\Jobs\DailyReportJob” que chama um arquivo “App\Mail\DailyReport”.

 

No arquivo “.env” quando a variável esta definida com “QUEUE_CONNECTION=database” ao rodar “php artisan queue:work” funciona sem problemas. Porém ao definir com REDIS (“QUEUE_CONNECTION=redis”) não funciona, ou seja, não envia o e-mail e também não aparece erros.

 

Como não tenho experiência no uso do redis em filas estou confuso.

Notei que na tabela “jobs ou failed_jobs” não aparece o registro quando uso redis. Isso é normal?

           

Rota: http://localhost:8989/email-test

Github: https://github.com/robertotnoya/curso-laravel-9

 

Agradeço costumeiro apoio.

Manager Carlos Ferreira 15/06/2022

Olá, Roberto!
Tudo bem?

O container do redis, está up?
docker-compose ps

Carlos Ferreira
Criador Roberto Noya 15/06/2022

Sim. esta

Inclusive eu uso o redis para cache e session

 

especializati-laravel-9   docker-php-entrypoint php-fpm    Up      9000/tcp                         

especializati-mysql       docker-entrypoint.sh mysqld      Up      0.0.0.0:3388->3306/tcp, 33060/tcp

especializati-nginx       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8989->80/tcp             

especializati-queue       docker-php-entrypoint php  ...   Up      9000/tcp                         

especializati-redis       docker-entrypoint.sh redis ...   Up      6379/tcp                      

Roberto Noya
Manager Carlos Ferreira 15/06/2022

Reinicia o container de filas, e tente novamente:
docker-compose restart queue

Carlos Ferreira
Criador Roberto Noya 15/06/2022

Ola Carlos,

A queue com Redis está funcionando agora. Entretanto, nāo estou conseguindo passar variaveis para VIEW do JOB

Quando eu crio uma View sem variáveis o email é enviado com sucesso.

Na tabela failed_jobs aparece o erro:

ErrorException: Trying to access array offset on value of type null ...

Eu fiz um outro teste onde eu envio o email diretamente da rota passando as variaveis e o email é enviado com sucesso!

$details['email'] = '[email protected]';
$details['name'] = 'Roberto Noya';

//dispatch(new App\Jobs\DailyReportJob($details));
Mail::to($details['email'])->send(new App\Mail\DailyReport($details));

Arquivo de rota: https://github.com/robertotnoya/curso-laravel-9/blob/main/routes/web.php 

Eu criei uma rota simples só para teste:

Route::get('email-test', function(){

$details['email'] = '[email protected]';
$details['name'] = 'Roberto Noya';

dispatch(new App\Jobs\DailyReportJob($details));

No arquivo DayliReportJob eu trato:

public $details;

public function __construct($details)
{
$this->details = $details;
}

public function handle()
{
$email = new DailyReport($this->details);
Mail::to($this->details['email'])->send($email);

}  

No arquivo DailyReport

public $details;

public function __construct($details)
{
$this->details = $details;
}
 
public function build()
{
return $this->view('mail.daily-report',[
'details' => $this->details
]);
}
Roberto Noya
Manager Carlos Ferreira 15/06/2022

Agora as filas estão ok, certo?

---

Sobre o novo problema, posta o código no GitHub por favor;

Carlos Ferreira
Criador Roberto Noya 15/06/2022

Ja esta no github

 

https://github.com/especializati/curso-laravel-9

 

 

Roberto Noya
Manager Carlos Ferreira 15/06/2022

Você enviou o meu próprio repositório do GitHub hehehehe

Mas, tinha o repo nas respostas anteriores

---

Uma sugestão, no JOB DailyReportJob trabalhe com uma tipagem mais forte:
private array $details;

public function __construct(array $details)
{
    $this->details = $details;
}

Com PHP 8 pode reduzir esse código a isso:
public function __construct(
    private array $details,
) {}

---

Faça um debug no seu método handle do seu job:
dd($this->details);

Carlos Ferreira
Criador Roberto Noya 15/06/2022

Oi Carlos,

Ao tipificar a variavel $details "public function __construct(array $details)" no metodo construtor do JOB e dubuga-lo apareceu:

robertonoya@MacBook-Pro-de-Roberto laravel9 % docker-compose exec app bash

roberto@9205350cb930:/var/www$ php artisan queue:work

[2022-06-22 12:33:34][prBXv7TqN0b5QEyA13EwPIGUTrf2Agia] Processing: App\Jobs\DailyReportJob

^ array:2 [

  "email" => "[email protected]"

  "name" => "Roberto Noya"

]

Na sequencia eu rodei o Job e FUNCIONOU!

Muito Obrigado!

 

Roberto Noya
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!