Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 23.04.2017 21:05:23

Спасибо за помощь.
В итоге перенёс отправку сообщения в модель и оформил как статичную функцию.
а в Kernel сделал ссылку на это функцию.
\NewsLatter::advertEnd($advert);

Всё заработало как надо.

#2 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 23.04.2017 19:00:33

смотреть в указанных файлах? На что
/etc/php5/cgi/php.ini
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini

Небольшая поправка. На сервере версия PHP 5.6.30-0+deb8u1 (native)

#3 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 23.04.2017 18:21:36

constb пишет:

у команднострочного пхп (php-cli) другой php.ini и его настройки отличаются от настроек пхп для веб-сервера?

Подскажите, пожалуйста, где смотреть? И на что стоит обратить внимание?

#4 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 23.04.2017 17:55:01

constb пишет:

надо задать APP_URL в .env

Исправил. С url разобрался.

а вот с кириллицей в  subject пока загвоздка.
Если пишу латиницей -  работает как положено.

Самое странное, что указанный код хорошо работает(несмотря на кириллицу и на урл) в других местах сайта.

А вот через Планировщик (Kernel.php) никак не хочет.

В чём может быть проблема?

#5 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 21.04.2017 11:24:30

Пока конечно не возможности проверить. А как насчёт кириллицы в subject?

#6 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 21.04.2017 09:19:01

Плюс один вопрос. Отличаются ссылки, которые заданы до отправки письма и после получения письма пользователем.
до отправки:
'advertLink' => 'http://bacay.ru/sport-otdykh-khobbi/4425'

После получения письма пользователем
http://localhost/sport-otdykh-khobbi/4425

Просьба подсказать, почему это так происходит?

#7 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 21.04.2017 07:54:49

по факту выяснилось, что проблема в subject('Истёк срок размещения Вашего объявления на '.config('cms.name').'').
Точнее в кириллическом написании.

Если всё пишу латиницей. Работает как следует.

Как мне сейчас обойти эту проблему?

#8 Re: Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 21.04.2017 06:32:15

constb пишет:

я думаю может это из-за того что ты пытаешься захватить $credentials из области видимости, в сериализованном колбэке они не могут быть захвачены, возьми эти данные из параметром колбэка, туда же не только $message передаётся

Можно по подробнее.

#10 Laravel 5.x » Просьба помочь с отправкой писем через планировщик » 20.04.2017 21:40:35

ALEX_kh
Ответов: 14

Добрый день
Просьба помочь разобраться в ошибке.
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').'');
        });

#12 Re: Laravel 5.x » Перестали выполняться задания по планировщику » 12.11.2016 21:36:53

причина возникновения ошибки стала ясна.

016-11-12 21:27:02] production.ERROR: exception 'ErrorException' with message 'Undefined index: HTTP_USER_AGENT' in /var/www/bacay/data/www/bacay.ru/modules/User/Entities/User.php:342
Stack trace:
#0 /var/www/bacay/data/www/bacay.ru/modules/User/Entities/User.php(342): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined index...', '/var/www/bacay/...', 342, Array)
#1 /var/www/bacay/data/www/bacay.ru/app/Http/routes.php(19): Modules\User\Entities\User::set_location()
#2 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(41): require('/var/www/bacay/...')
#3 [internal function]: App\Providers\RouteServiceProvider->App\Providers\{closure}(Object(Illuminate\Routing\Router))
#4 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Routing/Router.php(398): call_user_func(Object(Closure), Object(Illuminate\Routing\Router))
#5 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(42): Illuminate\Routing\Router->group(Array, Object(Closure))
#6 [internal function]: App\Providers\RouteServiceProvider->map(Object(Illuminate\Routing\Router))
#7 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#8 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php(72): Illuminate\Container\Container->call(Array)
#9 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php(31): Illuminate\Foundation\Support\Providers\RouteServiceProvider->loadRoutes()
#10 /var/www/bacay/data/www/bacay.ru/app/Providers/RouteServiceProvider.php(29): Illuminate\Foundation\Support\Providers\RouteServiceProvider->boot(Object(Illuminate\Routing\Router))
#11 [internal function]: App\Providers\RouteServiceProvider->boot(Object(Illuminate\Routing\Router))
#12 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#13 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(757): Illuminate\Container\Container->call(Array)
#14 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(740): Illuminate\Foundation\Application->bootProvider(Object(App\Providers\RouteServiceProvider))
#15 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(App\Providers\RouteServiceProvider), 14)
#16 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(741): array_walk(Array, Object(Closure))
#17 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\Foundation\Application->boot()
#18 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(203): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#19 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(219): Illuminate\Foundation\Application->bootstrapWith(Array)
#20 /var/www/bacay/data/www/bacay.ru/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(105): Illuminate\Foundation\Console\Kernel->bootstrap()
#21 /var/www/bacay/data/www/bacay.ru/artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 {main}  

  [ErrorException]                  
  Undefined index: HTTP_USER_AGENT

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

$is_bot = preg_match(
					"~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i", 
					$_SERVER['HTTP_USER_AGENT']
				);
				$response = !$is_bot ? json_decode(file_get_contents('http://api.sypexgeo.net/json/'.\Request::ip()), true): [];

#13 Re: Laravel 5.x » Перестали выполняться задания по планировщику » 12.11.2016 18:29:31

Поменял. Но ситуация не поменялась. Если отдельно запускаю эту команду - всё работает.
До этого несколько месяцев работала как положено, что сейчас изменилось - не пойму


Новые данные.
/var/spool/cron/crontabs/    У файла bacay  сейчас права 600 [-rw-------]

В логах
Nov 12 18:20:01 bacay CRON[22594]: (bacay) CMD (/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >>/dev/null 2>&1 >/dev/null 2>&1)

и так пробовал
Nov 12 18:24:01 bacay CRON[22755]: (bacay) CMD (php /var/www/bacay/data/www/bacay.ru/artisan schedule:run >>/dev/null 2>&1 >/dev/null 2>&1)

#15 Re: Laravel 5.x » Перестали выполняться задания по планировщику » 12.11.2016 16:25:07

1. До директории, где установлен сам laravel(Корневая директория): /var/www/bacay/data/www/bacay.ru
2. laravel/framework: 5.2
3. Версия PHP на сервере: 5.6.20-0+deb8u1.
Режим работы PHP: FastCGI (Nginx + PHP-FPM)
4. Веб сервер: VDS
5. ОС: Debian 8 x64 + ISPmgr5
6. В этом конечно мало опыта. Можно уточнить на каком файле?
Если имеется в виду какие права доступа на artisan, то 600 [-rw-------]
Если имеется в виду какие права доступа на Kernel.php(в нём прописаны задания), то 755 [-rwxr-xr-x]

#17 Laravel 5.x » Перестали выполняться задания по планировщику » 12.11.2016 10:41:25

ALEX_kh
Ответов: 10

Добрый день

Просьба помочь разобраться в ошибке.
После каких-то изменений(я так думаю) перестали работать задания, запускаемые по планировщику.
При этом, если я запускаю cron вручную, задания выполняются как положено.

на сервере крон запускается следующей записью :
/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >> /dev/null 2>&1
Запись рабочая. При ручном запуске этой команды запланированные задания выполняются как положено.
в логах видно, что команда запускается каждую минуту:
Nov 12 10:38:01 bacay CRON[7525]: (root) CMD (/usr/bin/php5 /var/www/bacay/data/www/bacay.ru/artisan schedule:run >> /dev/null 2>&1 >/dev/null 2>&1)

в Kernel.php прописаны следующие задания:
      $schedule->call(function () {
           
            $adverts = \Advert::all();
            foreach($adverts as $advert)
            {
                if(isset($advert->pivotEnd[0]))
                {
                    $end = $advert->pivotEnd[0]->pivot->end;
                    $status = $advert->status;
                    if($end < \Carbon::now() && $status == 1)
                    {
                       \DB::table('advert')
                        ->where('id', $advert->id)
                        ->update(['status' => 0]);
                    }
                }
            }
           
        })->everyMinute();
       
        $schedule->call(function () {
           
            $advusl =\DB::table('advert_uslugi')->get();
            foreach($advusl as $item)
            {
                    $now = date('Y-m-d H:i:s');
                    $now_date = strtotime($now);
                    $end = $item->end;
                    $end_date = strtotime($end);
                   
                    $flag = $item->flag;
                                       
                    if($end_date < $now_date && $flag == 1)
                    {
                        \DB::table('advert_uslugi')
                            ->where('uslugi_id', $item->uslugi_id)
                            ->update(['flag' => 0]);
                       
                        $services_id = $item->services_id;
                       
                        if($services_id == 4)
                        {
                            $advert_id = $item->advert_id;
                            $advert = \Advert::findOrFail($advert_id);
                            $advert->public_at = date('Y-m-d H:i:s');
                            $advert->save();
                        }
                    }
            }
           
        })->everyMinute();

Подвал раздела