Уведомление по электронной почте laravel 5.5 не обновляет контент

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class VerifyEmailNotification extends Notification implements ShouldQueue
{
    use Queueable;

    protected $token;

    /**
    * Create a new notification instance.
    *
    * @return void
    */
    public function __construct($token)
    {
        $this->token = $token;
    }

    /**
    * Get the notification's delivery channels.
    *
    * @param  mixed  $notifiable
    * @return array
    */
    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
    * Get the mail representation of the notification.
    *
    * @param  mixed  $notifiable
    * @return \Illuminate\Notifications\Messages\MailMessage
    */
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject(config('constants.title') . ' - Please Verify Your Email')
            ->line('You are receiving this email because you have sign up on ' . config('constants.title') . '.')
            ->action('Verify Email', url(config('app.url').route('verify_email', ['token' => $this->token], false)))
            ->line('If you did not sign up on ' . config('constants.title') . ', no further action is required.');
    }

    /**
    * Get the array representation of the notification.
    *
    * @param  mixed  $notifiable
    * @return array
    */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

Я использую уведомление по электронной почте laravel 5.5. Я изменил это почтовое уведомление, но оно где-то закешировалось. Мое приложение отправляет мне почту со старым содержимым, а не с текущим фрагментом кода, которым я поделился здесь. Я использую супервизор для мониторинга процессов очереди.

Я также очистил кеш представления, выполнив команду ниже, но она работает

php artisan view:clear

Я также перезапустил очередь

php artisan queue:restart

я тоже побежал

php artisan config:cache

но ничего не работает для меня.

Эта проблема может быть связана с супервайзером?


person faizan.sh    schedule 17.08.2018    source источник
comment
Вы запускаете свой код на Homestead?   -  person IlGala    schedule 17.08.2018
comment
я запускаю свой код на выделенном сервере.   -  person faizan.sh    schedule 17.08.2018
comment
перейдите в папку go /storage/framework/views/ удалите все, если и проверьте.   -  person Vasim Shaikh    schedule 17.08.2018
comment
в /storage/framework/views/ есть запись, когда я запускаю php artisan view:clear перед проверкой каталога   -  person faizan.sh    schedule 17.08.2018
comment
возможно, остановите своих рабочих, очистите кеш, перезапустите рабочих. Я бы даже рекомендовал перезапустить службу супервизора.   -  person Tschitsch    schedule 17.08.2018
comment
Я только что остановил супервизор и перезапустил его. Спасибо, это сработало для меня. sudo supervisorctl остановить все sudo supervisorctl перезапустить все   -  person faizan.sh    schedule 17.08.2018
comment
@Tschitsch опубликуйте это как ответ, чтобы я мог пометить его как принятый. Благодарность   -  person faizan.sh    schedule 17.08.2018


Ответы (1)


Эта проблема вообще не связана с кешем. При запуске работника очереди все классы уведомлений будут загружены один раз.

Любые изменения, происходящие с этими классами, не вступят в силу, поскольку рабочий процесс уже загрузил старые классы.

Вы можете прочитать это в документации Laravel:

Раздел "Запуск исполнителя":

Помните, что обработчики очередей являются долгоживущими процессами и сохраняют состояние загруженного приложения в памяти. В результате они не заметят изменений в вашей кодовой базе после их запуска. Итак, во время процесса развертывания обязательно перезапустите обработчики очередей.

Раздел об исполнителях очереди и развертывании:

Поскольку обработчики очереди являются долгоживущими процессами, они не будут принимать изменения в вашем коде без перезапуска. Таким образом, самый простой способ развернуть приложение с помощью обработчиков очередей — перезапустить обработчиков во время процесса развертывания. Вы можете изящно перезапустить всех рабочих, выполнив команду queue:restart.

Таким образом, чтобы обновить содержимое уведомлений, вы должны убить всех работающих работников очереди и перезапустить их.

Это предлагаемое решение (поскольку вы используете Supervisor) для перезапуска Supervisor отлично подойдет вам.

supervisorctl restart all

Но я не рекомендую этого делать, так как перезапуск Supervisor жестко убьет ваших обработчиков очереди, и текущее обработанное задание будет потеряно!

Редактировать: Использование команды перезапуска супервизора безопасно для Laravel 5.4+, но убедитесь, что для параметра stopwaitsecs (в файле конфигурации супервизора рабочего) установлено более высокое значение. чем расчетное время обработки задания.

Вот почему существует ремесленная команда для перезапуска очереди:

php artisan queue:restart

Вы должны использовать эту команду, чтобы убить работников очереди, и супервизор снова запустит их для вас.

Но имейте в виду, что эта команда займет некоторое время, прежде чем она вступит в силу, поскольку она будет транслировать сигнал перезапуска всем работающим обработчикам очереди, и обработчики очереди будут захватывать сигнал только после того, как закончат обработку своего текущего задания. Это то, что называется изящным убийством.

Чтобы эта ремесленная команда работала, обязательно настройте правильный драйвер кеша для Laravel, поскольку сигнал перезапуска передается через кеш.

person Mohamed El-Refaie    schedule 06.11.2018