发送(或发送)电子邮件时,我需要执行一些代码。我的应用程序正在运行Laravel 5.3。我按照此处说明进行了操作,并注册了LogSentMessage事件侦听器。
到目前为止,这是我的代码:
app/Listeners/LogSentMessage.php
:
<?php
namespace App\Listeners;
use Illuminate\Mail\Events\MessageSending;
class LogSentMessage
{
public function __construct()
{
//
}
public function handle(MessageSending $event)
{
logger('Hello World');
}
}
app/Listeners/EventServiceProvider.php
:
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
'Illuminate\Mail\Events\MessageSending' => [
'App\Listeners\LogSentMessage',
],
];
public function boot()
{
parent::boot();
//
}
}
它可以在两个不同的开发环境中完美运行,侦听器会记录“ Hello World”,但在我的生产环境中则无法运行。是什么原因造成的?我正在使用数据库队列驱动程序将电子邮件发送存储为作业,但是按照以下说明这应该不是问题:
Laravel在发送邮件消息之前会触发一个事件。请记住,此事件在发送邮件时触发,而不是在排队时触发。您可以在EventServiceProvider中注册此事件的事件侦听器:
另外,我的生产环境是通过Laravel Forge创建的Homestead图像
队列工作者将应用程序存储在内存中。因此,如果您是第一次启动队列侦听器后添加了记录器,请确保运行php artisan queue:restart
以刷新作业:
请记住,队列工作器是长期存在的进程,并将启动的应用程序状态存储在内存中。因此,启动它们后,他们将不会注意到代码库中的更改。因此,在部署过程中,请确保重新启动队列工作器。
来源:运行队列工作器
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句