2016-09-22 109 views
0

我已经安装了laravel 5.2.0和https://github.com/jenssegers/laravel-mongodb,并希望通过队列发送电子邮件。我创建工作表成功,但运行PHP工匠队列时:工作命令时,它抛出下面的错误 -php工匠队列:工作不与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

我花了很多小时来解决它,但仍然没有working.Any帮助将非常感激,非常感谢。

编辑 - 作为建议“的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的作为工作队列和蒙戈为DB

+0

是的,我现在在使用Redis,感谢您的回复@ Pian0_M4n –

0

我们遇到了同样的问题,早在Laravel 5.1,尽管与适当_id蒙戈标识符修补laravel-MongoDB的队列实现了,我们发现查询生成器语法不在数据库级别允许适当的原子性。我们最终编写了自己的实现文档级锁定的队列驱动程序。这样我们可以保证每个工作只有在有多名工人时才会运行一次。

可以发现,对于Laravel工作5.1+我们这里的队列驱动程序版本:https://github.com/chefsplate/laravel-mongodb-queue

我们不得不使用Redis的作为队列主要关注的是,除非你能可靠地刷新到磁盘,因为所有的工作存储在内存中,REDIS出现故障时可能会丢失工作。如果您经常将REDIS写入磁盘(它带有一系列问题),那么使用MongoDB等持久存储可能会更好。