データベースでfsync+lockメソッドを呼び出したい場合、RailsアプリのMongoidでこれを行う方法はありますか?この操作を実行するレプリカノードのみを指定する方法もありますか?
cronを使用して毎晩バックアップを実行するrakeタスクを作成しようとしています。
データベースでfsync+lockメソッドを呼び出したい場合、RailsアプリのMongoidでこれを行う方法はありますか?この操作を実行するレプリカノードのみを指定する方法もありますか?
cronを使用して毎晩バックアップを実行するrakeタスクを作成しようとしています。
Mongoid 2 は、10gen 対応のドライバーを使用します。Mongoid::Config.master.connection はクラス Mongo::MongoClient (以前は Mongo::Connection) の接続オブジェクトに対応します。このクラスにはインスタンス メソッド ロックがあります。これは fsyncLock コマンドを実行し、ロックを解除します! その仲間です。
http://api.mongodb.org/ruby/current/Mongo/MongoClient.html#lock!-instance_method
http://api.mongodb.org/ruby/current/Mongo/MongoClient.html#unlock!-instance_method
これらのメソッドには、レプリカ セットのメンバーを指定するオプションはありません。本質的に内部使用のためのソケットによってのみ指定できます。そのため、特定のレプリカ セット メンバーを fsyncLock する必要がある場合は、Mongo::MongoClient.new(host, port) などの明示的な接続を介して明示的に接続することをお勧めします。
client = Mongo::MongoClient.new(host, port)
client.lock!
# ...
client.unlock!
client.close
Mongoid 3 は Moped を使用し、10gen ドライバーは使用しません。しかし、Mongoid 3 に移行したとしても、rake タスクに 10gen ドライバーを独立して使用することはできます。
あなたの結果とフォローアップの質問に興味があります。