在我的 Laravel 5.3.* 应用程序中,我在后台运行队列。这在我的本地机器上工作得很好。但是,当它在服务器(共享主机)上运行时,它根本不起作用。
这是场景:
管理员正在提交管理员生成器表单数据。
数据被插入到数据库中。
拍摄有关相同的电子邮件。
所以,为了让这个功能顺利进行,我在服务器的 cPanel 上创建了一个 cron 作业。
这是 cron 作业:
/usr/local/bin/php /home/<username>/laravel-app/artisan schedule:run >/dev/null 2>&1
这是app/Console/Kernel.php
文件内容
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('queue:work --daemon --tries=3')
->everyMinute()
->withoutOverlapping();
}
我还通过运行创建了作业数据库
php artisan queue:table;
php artisan queue:failed-table;
php artisan migrate;
生成/插入管理员时,会触发一个事件:
event(new AdministratorHasBeenGenerated($user, $request->password));
这将向提供的电子邮件 ID 发送一封欢迎电子邮件(in app/Listeners/AdministratorHasBeenGenerated/SendWelcomeEmail.php
)
/**
* Handle the event.
*
* @param AdministratorHasBeenGenerated $event
* @return void
*/
public function handle(AdministratorHasBeenGenerated $event)
{
Mail::to($event->administrator->email)
->queue(new GeneratedMail($event->administrator, $event->password));
}
这是 .env 文件中的邮件配置
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=correct_username
MAIL_PASSWORD=correct_password
MAIL_ENCRYPTION=null
我没有收到任何错误或类似的东西,但即使我提供了正确的电子邮件 ID,我也没有收到任何欢迎电子邮件。
更新 1:2017 年 12 月 21 日
这只是一种解决方法,因为我找不到这个问题的实际解决方案。我所做的是我为运行队列创建了另一个 cron 作业。
/usr/local/bin/php /home/<username>/laravel-app/artisan queue:work --daemon --tries=3 >/dev/null 2>&1
这将queue:work
每分钟触发一次命令(或您在 cPanel 的 cron 作业选项卡中设置的任何内容)..
我猜上述解决方案不正确。欢迎更正/修正。
任何人都可以指出我必须在哪里和做什么的错误吗?已经4个多小时了,我找不到任何解决方案。
非常感谢任何帮助。谢谢。