Планировщик вызовов Laravel
Я работаю с Laravel Task Scheduling, но у меня есть проблема, когда я вызываю какой-то метод с моего контроллера.
protected function schedule(Schedule $schedule)
{
$schedule->call('[email protected]')->everyMinute();
//$schedule->call('App\Http\Controllers\[email protected]')->everyMinute();
}
Когда я вызываю с недокументированной строкой, я получаю эту ошибку:
[ReflectionException]
Class RecurrenceInvoiceController does not exist
а затем я вставляю полный путь пространства имен, а затем получаю эту ошибку:
[PDOException] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
И
[ErrorException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known
Где проблема? Какой способ является правильным для вызова метода из контроллера из Laravel Task Scheduling.
Ответы
Ответ 1
Я споткнулся несколько месяцев назад с той же проблемой, пока не смог это исправить.
Я использую laravel 5.2, и ядро вызывает мои драйверы следующим образом:
$schedule->call('App\Http\Controllers\[email protected]')->everyMinute();
Я надеюсь, что это поможет кому-то еще;)
Ответ 2
Для меня первая ошибка выглядит так: вам нужно запустить composer update
, затем composer dump-autoload
.
Если это сработает, вы также получите вторую ошибку, значение ошибки 2002:
Невозможно подключиться к локальному серверу MySQL через сокет "(см. (Коды ошибок клиента и сообщения в документах MySQL).
Вам нужно настроить конфигурацию базы данных в файле .env
Ответ 3
Также теперь я тестирую более простую функцию для вставки новой валюты в базу данных. Вот код:
public function handle()
{
$currency = new Currency();
$currency->currency_name = 'EUR';
$currency->save();
$this->info('New currency is successfully generated!');
}
Эта функция от laravel/app/Console/Commands
. Я звоню из Kernel > schedule()
. Не работает.
Когда я вставляю простую запись журнала в функцию handle()
, например:
File::put(base_path() . '/storage/logs/test_logs.txt', 'Test log ' . Carbon::now()->format('Y-m-d H:i:s') . PHP_EOL);
это работает. Но когда я пытаюсь создать новый объект из Models
и сохранить в db → , это не работает.
Ответ 4
OK. Я решил эту проблему. Проблема заключалась в контейнере Docker Cron. Контейнер Cron не был связан с контейнером MySQL.
Спасибо за все ответы.
Ответ 5
Непосредственно поместите это в функцию расписания в файле kernel.php
$schedule-> вызов ( 'App\Http\Контроллеры\YourController @функции') → everyMinute();
Это будет запускаться через каждую минуту
Примечание:
В localhost вы должны запускать его вручную, но на сервере, вы должны попробовать эту команду в вашем cronjob, это будет автоматически вызывать функцию вашего контроллера через каждую минуту
php -d register_argc_argv = On/home/iflasity/public_html/foldername/artisan schedule: запустить>/dev/null 2> & 1
cd/home/iflasity/public_html/foldername && Расписание ремесленника php: run/dev/null 2> & 1