Mail
和later()
在我给它作为参数的时间上不起作用。
$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
答案 0 :(得分:0)
Laravel Mail later
功能需要运行队列才能运行。默认情况下,您的QUEUE_DRIVER
设置为sync
。这意味着它将立即将其触发。
使用redis
或database
队列,以便以后可以将作业排队。
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`