0

laravel 5.2.0 とhttps://github.com/jenssegers/laravel-mongodbをインストールし、キュー経由でメールを送信したいと考えています。ジョブテーブルを正常に作成しましたが、php artisan queue:workコマンドを実行すると、次のエラーがスローされます -

PHP 致命的なエラー: 行 576 の /var/www/html/admin/setupl/vendor/laravel/framework/src/Illuminate/Database/Connection.php の null でメンバー関数 beginTransaction() を呼び出す

データベース接続を確認しました。コマンドラインでの完全なログは次のとおりです-ここに画像の説明を入力

私はそれを解決するために何時間も費やしましたが、まだ機能していません。

編集- 「MongoDB にはトランザクションがないため、Laravel が 1 つを開始しようとすると例外がスローされる」と示唆されているように、https://github.com/jenssegers/laravel-mongodb/pull/871で、beginTransaction と commit のコードにコメントを付けました。 () と null を返します。エラーはなくなりましたが、コマンドはまだ機能していません。

public function commit()
{
    return null;
}

public function beginTransaction()
{
    return null;
}
4

2 に答える 2

0

Redisのキャッシュとして使用するだけの方が良いでしょうLaravel。キューに適していて、ネイティブ サポートがあります。Redis をワーカー キューとして使用し、Mongo を db として使用します。

于 2016-09-28T10:08:58.700 に答える
0

Laravel 5.1 で同じ問題に遭遇し、適切な Mongo 識別子で laravel-mongodb キューの実装にパッチを適用したにもかかわらず_id、クエリ ビルダーの構文がデータベース レベルで適切な原子性を許可していないことがわかりました。最終的に、ドキュメント レベルのロックを実装する独自のキュー ドライバーを作成しました。そうすれば、複数のワーカーがある場合でも、各ジョブが 1 回だけ実行されることを保証できます。

Laravel 5.1+ で動作するキュー ドライバーのバージョンは、https ://github.com/chefsplate/laravel-mongodb-queue で確認できます。

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

于 2017-02-13T21:57:46.423 に答える