2016-09-22 106 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等持久存儲可能會更好。