2016-09-22 13 views
0

laravel 5.2.0とhttps://github.com/jenssegers/laravel-mongodbがインストールされており、キューから電子メールを送信したいと考えています。私は成功したジョブのテーブルを作成しましたが、PHPの職人キュー実行している場合:作業コマンドを、エラー、次の投げている - enter image description herephp 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

私はここで、データベース接続をチェックしたコマンドラインでの私の完全なログです

私はそれを解決するためにまだ多くの時間を費やしてきましたが、何の助けもありませんでした。

編集 - 示唆したように、今の誤差が行っている、https://github.com/jenssegers/laravel-mongodb/pull/871ここで、私はのbeginTransactionにコードをコメントしているし、(コミット「のMongoDBのでthrowed Laravelは一つの例外を開始しようとするとされ、取引を持っていない」)とnullを返しそれでもコマンドは動作しません。

public function commit() 
{ 
    return null; 
} 

そして

public function beginTransaction() 
{ 
    return null; 
} 

答えて

0

あなただけLaravelのキャッシュとしてRedis使用する場合それは良いでしょう。キューにはるかに適しており、ネイティブサポートもあります。私はRedisをワーカー・キューとして使用し、Mongoはdbとして使用します

+0

はい、私はRedisを使用しています。返信いただきありがとうございます@ Pian0_M4n –

0

Laravel 5.1で同じ問題が発生し、適切な_id Mongo識別子でlaravel-mongodbキューの実装にパッチを当てていても、データベースレベルで適切なアトミック性が得られるようにします。ドキュメントレベルのロックを実装する独自のキュードライバを作成しました。そうすれば、複数の労働者がいる場合にのみ各作業が1回実行されることを保証できます。

あなたがここ5.1+ Laravelのために働く私たちのキュードライバのバージョンを見つけることができます:https://github.com/chefsplate/laravel-mongodb-queue

我々はキューとしてのRedisを使用するために持っていた主な関心事である、あなたが、ディスクに確実にフラッシュできない限り、すべてのジョブからメモリに保存されている場合、REDISがダウンするとジョブが失われる可能性があります。また、REDISをディスクに頻繁に書き込んでいる場合(これは独自の懸念事項があります)、MongoDBなどの永続ストアを使用する方がよい場合があります。

関連する問題