2011-12-07 16 views
6

Pythonでunixソケット経由でmongodbに接続する方法はありますか?pymongoモジュールはまだUNIXソケットをサポートしていません。PythonでUnixソケット経由でmongodbに接続する方法

私が検索して見つけていない間に、サードパーティの代替製品やパッチが必要です。

mongodb => python dictsは自然で使いやすいので、私はORM形式のライブラリが気に入らないので、MongoEngineのようなものを考慮しませんでした。

答えて

7

MongoDBは、デフォルトでは、/tmp/mongodb-27017.sockでUnixソケットを作成します。

from pymongo import MongoClient 
CONNECTION = MongoClient('/tmp/mongodb-27017.sock') 

はまた、あなたが--nounixsocketでのmongodを起動すると、この動作を無効にするか、常に作成し、UNIX上でリッスンします--unixSocketPrefix <path>

MongoDBを持つ別の場所を指定することができますpymongo 2.4のとして、あなたは、このような接続を行うことができます--nounixsocketが設定されていない場合、--bind_ipが設定されていないか、--bind_ip127.0.0.1と指定されている場合を除きます。あなたがLinux上でのMongoDB 3.xのにアップグレードした場合のMongoDB v3.xの

ため

+0

これは最終的にpymongo 2.4以降に実装されました。ありがとうございました! –

+0

「pymongo 2.4以降」と言ってください。 pymongoはunixソケットを作成していますか?または、それは "...靴下"です.pymongo 2.4では、接続することができます... " –

+0

明快に編集してください、ありがとうございます。 –

1

Pythonの範囲外では、TCP/IPソケットとUNIXドメインソケットの間にプロキシを構築できます。だから、あなたはまだpymongoを使用することができます

いずれかnetcatまたはsocatこれを行うことができます。

nc -l 1234 | nc -U /tmp/foo 

または

socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo 

も参照してください:

Redirecting TCP-traffic to a UNIX domain socket under Linux

+1

はとにかくありがとうございますが、これは私が:)私は、パフォーマンスと安定性のためにUNIXソケットを使用したいが、私はビルドする場合は希望通りものではありませんTCPのプロキシと2つの目標がすべて欠けているクエリを転送します。 –

6

アップデートは、/tmp/mongodb-27017.sock上のグループと他の権限は削除されました。 MongoClient(host = '/ tmp/mongodb-27017.sock')を使用して接続すると、エラーが許可されなくなります。

これを修正するには、MongoDB設定ファイルをfilePermissionsオプションを含むYAML形式にアップグレードしますアクセス許可を戻します。 YAMLフォーマットで

例/etc/mongod.conf:

storage: 
    dbPath: "/var/lib/mongodb" 
systemLog: 
    destination: file 
    path: "/var/log/mongodb/mongod.log" 
    logAppend: true 
net: 
    unixDomainSocket: 
     filePermissions: 0777 
関連する問題