Laravel по-русски

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

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

#1 17.01.2020 13:51:05

Очереди не записываются в БД

Использую последний ларавель.
Создал джобу на отправку POST запроса на внешний ресурс

    public function handle()
    {
        $this->client->request('POST', 'https://.....', [
            'body' => $this->body, 'synchronous' => true
        ]);
    }

    public function __construct($headers, $body)
    {
        $this->body = $body;
        $this->client = new GuzzleClient([
            'headers' => $headers
        ]);

    }

Настроил очереди и БД:

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sitech
DB_USERNAME=sitech
DB_PASSWORD=sitech

database.php

'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
],

queue.php

'default' => env('QUEUE_DRIVER', 'database'),
 'connections' => [
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],
    ],

Выполнил миграции для очередей

В контроллере вызываю:

dispatch(new CreateIssue($headers, $body));

Что интересно, dispatch находится в цикле. После первого выполнения dispatch следующая итерация цикла не начинается. Если dispatch закомментировать цикл выполняется.

Что здесь не так?

Не в сети

#2 17.01.2020 16:16:30

Re: Очереди не записываются в БД

А в .env у тебя упоминается QUEUE_DRIVER ?
Миграции выполнил (если драйвер для базы) ?

Изменено artoodetoo (17.01.2020 16:18:30)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 17.01.2020 20:22:35

Re: Очереди не записываются в БД

А в .env у тебя упоминается QUEUE_DRIVER ?

Да, там тоже: QUEUE_DRIVER=database

Миграции выполнил (если драйвер для базы) ?

Миграции выполнил, обе таблицы есть: jobs и failed_jobs.

Кстати, логи тоже пустые (storage\logs). Хотя отладка в .env включена.

Не в сети

#4 17.01.2020 22:31:40

Re: Очереди не записываются в БД

@artoodetoo ,
Кстати, если так:

dd("111");
dispatch(new CreateIssue($headers, $body));

То я получаю вывод на экран 111
А если так:

dispatch(new CreateIssue($headers, $body));
dd("222");

то не получаю.

На всякий случай приведу весь код контроллера:

class MainController extends Controller
{
    public function index(Request $request){
        $url = $request->request->get('url');
        if (!empty($url)) {
            $doc = hQuery::fromUrl($url,
                ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36']
            );

            try {
                $errors = $doc->find('#results > ol > li');
                if ( $errors ) {
                    foreach($errors as $error) {

                        $text = $error->find('span')[0]->text;
                        
                        $iBody = ([
                            "summary" => $text,
                            'custom_fields' => '',
                            'tags' => '',
                        ]);
                        $body = json_encode($iBody);

                        $headers = [
                            'Authorization' => '1111111111111111111111111111111',
                            'Content-Type' => 'application/json',
                        ];

                        dispatch(new CreateIssue($headers, $body));
                    }
                }

            } catch (\Exception $e) {
            }
        }
        return dd('Empty URL');
    }
}

Не в сети

#5 18.01.2020 00:40:26

Re: Очереди не записываются в БД

Ошибку нашел. Не правильно передавал параметры в конструктор. Все заработало.

Не в сети

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