php artisan queue: работа не работает с mongodb и laravel 5.2

Я установил Laravel 5.2.0 и https://github.com/jenssegers/laravel-mongodb , и хотите отправлять электронные письма через очередь. Я успешно создал таблицу заданий, но при запуске php artisan queue: работа команда выдает следующую ошибку —

Неустранимая ошибка PHP: вызов функции-члена beginTransaction () для null в /var/www/html/admin/setupl/vendor/laravel/framework/src/Illuminate/Database/Connection.php в строке 576

Я проверил соединение с базой данных, вот мои полные журналы в командной строке — введите описание изображения здесь

Я потратил много часов, чтобы решить эту проблему, но все еще не работал. Любая помощь будет очень признательна, большое спасибо.

редактировать — Как и предполагалось, «MongoDB не имеет транзакций, поэтому, когда Laravel пытается начать одну, выдается исключение» здесь https://github.com/jenssegers/laravel-mongodb/pull/871 , Я прокомментировал коды в beginTransaction и commit () и вернул null, теперь ошибка исчезла, но команда все еще не работает.

public function commit()
{
return null;
}

А также

public function beginTransaction()
{
return null;
}

0

Решение

Лучше, если вы просто используете Redis как кеш для Laravel, Это гораздо больше подходит для очередей и имеет встроенную поддержку. Я использую Redis как рабочую очередь и Mongo как db

0

Другие решения

Мы столкнулись с той же проблемой еще в Laravel 5.1 и, несмотря на исправление реализации очереди laravel-mongodb, с правильным _id Монго-идентификаторы, мы обнаружили, что синтаксис построителя запросов не допускает должной атомарности на уровне базы данных. Мы закончили тем, что написали наш собственный драйвер очереди, который реализует блокировку на уровне документа. Таким образом, мы можем гарантировать, что каждая работа выполняется только один раз, если есть несколько работников.

Вы можете найти версии нашего драйвера очереди, которые работают для Laravel 5.1+ здесь: https://github.com/chefsplate/laravel-mongodb-queue

Основная проблема, с которой мы столкнулись при использовании REDIS в качестве очереди, заключается в том, что, если вы не сможете надежно выполнить сброс на диск, поскольку все задания хранятся в памяти, существует вероятность того, что вы можете потерять задания в случае сбоя REDIS. И если вы часто записываете REDIS на диск (что связано с собственным набором проблем), вам лучше использовать постоянное хранилище, такое как MongoDB.

0

По вопросам рекламы [email protected]