Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день
Просьба помочь разобраться в ошибке.
1. laravel/framework: 5.2
2. Версия PHP на сервере: 5.6.20-0+deb8u1.
Режим работы PHP: FastCGI (Nginx + PHP-FPM)
3. Веб сервер: VDS
4. ОС: Debian 8 x64 + ISPmgr5
Через планировщик пытаюсь реализовать отправку писем пользователям.
Получаю одну и туже ошибку.
production.ERROR: exception 'ReflectionException' with message 'Class does not exist' in /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Container/Container.php:738
ReflectionException in Container.php line 738:
Class does not exist
in Container.php line 738
at ReflectionClass->__construct('') in Container.php line 738
at Container->build('', array()) in Container.php line 633
at Container->make('', array()) in Application.php line 697
at Application->make('') in Job.php line 153
at Job->resolve('') in Job.php line 209
at Job->failed() in SyncQueue.php line 153
at SyncQueue->handleFailedJob(object(SyncJob)) in SyncQueue.php line 36
at SyncQueue->push('mailer@handleQueuedMessage', array('view' => 'advert::mail.advert-end', 'data' => array('email' => 'bacay@yandex.ru', 'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425', 'advertName' => 'В отличном состоянии Штекерный спининг + Катушка', 'userName' => 'Админ BACAY'), 'callback' => 'C:32:"SuperClosure\SerializableClosure":563:{a:5:{s:4:"code";s:165:"function ($message) use($credentials) { $message->to($credentials['email'])->subject(' ' . config('cms.name') . ''); };";s:7:"context";a:1:{s:11:"credentials";a:4:{s:5:"email";s:14:"bacay@bacay.ru";s:10:"advertLink";s:40:"http://bacay.ru/sport-otdykh-khobbi/4425";s:10:"advertName";s:89:"В отличном состоянии Штекерный спининг + Катушка";s:8:"userName";s:16:"Админ BACAY";}}s:7:"binding";N;s:5:"scope";s:18:"App\Console\Kernel";s:8:"isStatic";b:0;}}'), null) in Mailer.php line 189
at Mailer->queue('advert::mail.advert-end', array('email' => 'bacay@yandex.ru', 'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425', 'advertName' => 'В отличном состоянии Штекерный спининг + Катушка', 'userName' => 'Админ BACAY'), object(Closure)) in Facade.php line 224
at Facade::__callStatic('queue', array('advert::mail.advert-end', array('email' => 'bacay@yandex.ru', 'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425', 'advertName' => 'В отличном состоянии Штекерный спининг + Катушка', 'userName' => 'Админ BACAY'), object(Closure))) in Kernel.php line 55
at Mail::queue('advert::mail.advert-end', array('email' => 'bacay@yandex.ru', 'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425', 'advertName' => 'В отличном состоянии Штекерный спининг + Катушка', 'userName' => 'Админ BACAY'), object(Closure)) in Kernel.php line 55
at Kernel->App\Console\{closure}()
at call_user_func_array(object(Closure), array()) in Container.php line 507
at Container->call(object(Closure), array()) in CallbackEvent.php line 61
at CallbackEvent->run(object(Application)) in ScheduleRunCommand.php line 61
at ScheduleRunCommand->fire()
at call_user_func_array(array(object(ScheduleRunCommand), 'fire'), array()) in Container.php line 507
at Container->call(array(object(ScheduleRunCommand), 'fire')) in Command.php line 169
at Command->execute(object(ArrayInput), object(BufferedOutput)) in Command.php line 256
at Command->run(object(ArrayInput), object(BufferedOutput)) in Command.php line 155
at Command->run(object(ArrayInput), object(BufferedOutput)) in Application.php line 791
at Application->doRunCommand(object(ScheduleRunCommand), object(ArrayInput), object(BufferedOutput)) in Application.php line 186
at Application->doRun(object(ArrayInput), object(BufferedOutput)) in Application.php line 117
at Application->run(object(ArrayInput), object(BufferedOutput)) in Application.php line 64
at Application->call('schedule:run', array()) in Kernel.php line 170
at Kernel->call('schedule:run') in Facade.php line 218
at Facade::__callStatic('call', array('schedule:run')) in CmsController.php line 35
at Artisan::call('schedule:run') in CmsController.php line 35
at CmsController->runCron()
Хотя указанный код хорошо работает в других местах.
в Kernel.php прописаны следующие задания:
$user = \User::findOrFail($advert->user_id);
$credentials = [
'email' => $user->email,
'advertLink' => route($advert->type.'.show', $advert->id),
'advertName' => $advert->name,
'userName' => $user->name,
];
\Mail::later(10, 'advert::mail.advert-end', $credentials, function($message) use ($credentials)
{
$message->to($credentials['email'])->subject('Истёк срок размещения Вашего объявления на '.config('cms.name').'');
});
Не в сети
что-то я сомневаюсь что Mail::later вообще должен работать с QUEUE_DRIVER=sync
Не в сети
Пробовал вот так Mail::queue. Всё равно выходит ошибка
Не в сети
очень странно как-то. судя по дампу в Mailer->queue колбэк приходит, но при помещении его в очередь c SyncQueue->push('mailer@handleQueuedMessage', ...) третий параметр – уже null. такое впечатление что колбэк по каким-то причинам не может быть сериализован. похоже Mailer->buildQueueCallable по каким-то причинам не срабатывает и не может его нормально сериализовать. дальше уже видимо только с отладчиком можно выяснить отчего что-то идёт не так, тут я помочь не смогу
Не в сети
я думаю может это из-за того что ты пытаешься захватить $credentials из области видимости, в сериализованном колбэке они не могут быть захвачены, возьми эти данные из параметром колбэка, туда же не только $message передаётся
Не в сети
я думаю может это из-за того что ты пытаешься захватить $credentials из области видимости, в сериализованном колбэке они не могут быть захвачены, возьми эти данные из параметром колбэка, туда же не только $message передаётся
Можно по подробнее.
Не в сети
по факту выяснилось, что проблема в subject('Истёк срок размещения Вашего объявления на '.config('cms.name').'').
Точнее в кириллическом написании.
Если всё пишу латиницей. Работает как следует.
Как мне сейчас обойти эту проблему?
Не в сети
Плюс один вопрос. Отличаются ссылки, которые заданы до отправки письма и после получения письма пользователем.
до отправки:
'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425'
После получения письма пользователем
http://localhost/sport-otdykh-khobbi/4425
Просьба подсказать, почему это так происходит?
Не в сети
надо задать APP_URL в .env
Не в сети
Пока конечно не возможности проверить. А как насчёт кириллицы в subject?
Не в сети
надо задать APP_URL в .env
Исправил. С url разобрался.
а вот с кириллицей в subject пока загвоздка.
Если пишу латиницей - работает как положено.
Самое странное, что указанный код хорошо работает(несмотря на кириллицу и на урл) в других местах сайта.
А вот через Планировщик (Kernel.php) никак не хочет.
В чём может быть проблема?
Не в сети
у команднострочного пхп (php-cli) другой php.ini и его настройки отличаются от настроек пхп для веб-сервера?
Не в сети
у команднострочного пхп (php-cli) другой php.ini и его настройки отличаются от настроек пхп для веб-сервера?
Подскажите, пожалуйста, где смотреть? И на что стоит обратить внимание?
Не в сети
смотреть в указанных файлах? На что
/etc/php5/cgi/php.ini
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
Небольшая поправка. На сервере версия PHP 5.6.30-0+deb8u1 (native)
Не в сети
Спасибо за помощь.
В итоге перенёс отправку сообщения в модель и оформил как статичную функцию.
а в Kernel сделал ссылку на это функцию.
\NewsLatter::advertEnd($advert);
Всё заработало как надо.
Не в сети
Страницы 1