0

在我的 Laravel 5.3.* 应用程序中,我在后台运行队列。这在我的本地机器上工作得很好。但是,当它在服务器(共享主机)上运行时,它根本不起作用。

这是场景:

  1. 管理员正在提交管理员生成器表单数据。

  2. 数据被插入到数据库中。

  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个多小时了,我找不到任何解决方案。

非常感谢任何帮助。谢谢。

4

0 回答 0