Laravel 5,邮件:: with Later()无法正常工作

时间:2019-07-19 16:20:55

标签: laravel

Maillater()在我给它作为参数的时间上不起作用。

$when = $final_new_days_count;//Carbon::now()->addMinutes(5);
Mail::to($user)
    ->later($when, new Expired($user, $when));

I'm receiving the email just when I execute the code that calls `Mail::`

With `dd($when);` I get:

Carbon {#766 ▼
  +"date": "2019-07-22 23:59:59.229078"
  +"timezone_type": 3
  +"timezone": "UTC"
}

Actually, in the email view I'm sending this:

<p>Now: {{ \Carbon\Carbon::now() }}</p>
<p>When: {{ $when->date }}</p>

我在收到的电子邮件中看到:

Now: 2019-07-19 16:18:23
When: 2019-07-22 23:59:59.315271

那么为什么later无法正常工作?

编辑:在我的.env中,我有:

QUEUE_DRIVER=sync

我无法更改,其他一些功能需要它。

编辑2:好吧,我使用QUEUE_DRIVER = database进行了测试,但不知道php artisan queue:work必须一直运行。我不能一直这样运行:S

1 个答案:

答案 0 :(得分:0)

Laravel Mail later功能需要运行队列才能运行。默认情况下,您的QUEUE_DRIVER设置为sync。这意味着它将立即将其触发。

使用redisdatabase队列,以便以后可以将作业排队。

QUEUE_DRIVER=redis

如果您不想一直在命令行中运行php artisan queue:work,我建议您使用Supervisor之类的流程管理器。

有关队列流程和流程管理器的文档:

https://laravel.com/docs/5.8/queues#running-the-queue-worker

安装主管:

https://cloudwafer.com/blog/how-to-install-and-configure-supervisor-on-ubuntu-16-04/

这将允许php artisan queue:work作为后台进程运行。

如果您决定使用主管,则以下配置将起作用:

 `[program:laravel-worker]
  process_name=%(program_name)s_%(process_num)02d
  command=php /path/to/artisan queue:work
  autostart=true
  autorestart=true
  numprocs=8
  redirect_stderr=true
  stdout_logfile=/home/forge/app.com/worker.log`