2016-09-22 2 views
0

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

PHP Fatal error: Call to a member function beginTransaction() on null in /var/www/html/admin/setupl/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 576

Я проверил соединение с базой данных, здесь мои полные логи в командной строке - enter image description here

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

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

public function commit() 
{ 
    return null; 
} 

И

public function beginTransaction() 
{ 
    return null; 
} 

ответ

0

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

+0

Да, я использую Redis сейчас, спасибо за ваш ответ @ Pian0_M4n –

0

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

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

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

Смежные вопросы