У меня есть библиотека, которая импортирует много изображений, и я пытаюсь использовать фоновые задания Laravel. Для работы в очереди я следую документации Laravel.
Сначала (создать таблицу):
php artisan queue:table
php artisan migrate
Затем конфигурация в файле .env для Redis:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=43216
Создать работу:
php artisan make:job CarsJob
CarsJob:
public function handle()
{
$cars = new CarsLibrary();
$CarsLibrary->importAll();
}
Отправка задания в каком-либо действии в контроллере:
Первое, что я попробовал:
$importCarsJob = (new ImportCarsJob())->onQueue('import_cars');
$this->dispatch($importCarsJob );
Второе, что я пробовал:
$importCarsJob = new importCarsJob();
$this->dispatch($importCarsJob);
Я включил Redis на своем хостинге. Это виртуальный хостинг.
Если я получаю доступ к URL-адресу, я вижу, что это задание находится не в фоновом режиме, поскольку для завершения запроса требуется более минуты.
EDIT:
Файл env
указан выше, это config/queue.php
:
'connections' => [
'sync' => [
'driver' => 'redis',
],
... other drivers like beanstalkd
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
],
],
- У меня нет
REDIS_QUEUE
в env
файле.