2011-12-07 19 views
6

¿Hay alguna forma de conectarse a mongodb a través del socket unix en python, mientras que el módulo oficial pymongo aún no es compatible con unix socket.Cómo conectarse a mongodb a través del socket unix en python

Me gustaría cualquier alternativa de terceros, o parches, mientras he buscado y no he encontrado ninguno.

No me gusta una biblioteca de estilo ORM ya que los dictados mongodb => python son naturales y fáciles de usar, así que no tomé en cuenta algo como MongoEngine.

Respuesta

7

MongoDB, por defecto, crea un socket UNIX en /tmp/mongodb-27017.sock. A partir de pymongo 2.4 se puede realizar una conexión de la siguiente manera:

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

Además, puede desactivar este comportamiento iniciando mongod con --nounixsocket o especificar una ubicación alternativa con --unixSocketPrefix <path>

MongoDB siempre crear y escuchar en un UNIX socket, a menos que --nounixsocket esté configurado, --bind_ip no está configurado o --bind_ip especifica 127.0.0.1.

+0

Así que esto finalmente se implementó desde pymongo 2.4. ¡Gracias! –

+0

Diga, "a partir de pymongo 2.4". ¿Es pymongo el que crea el socket de Unix? O es "' ... sock'. A partir de pymongo 2.4, puede hacer una conexión ... " –

+0

Editar para mayor claridad, gracias. –

1

Fuera del alcance de Python, puede construir un proxy entre el zócalo TCP/IP y el zócalo de dominio de Unix. De modo que, aún puede usar pymongo

O netcat o socat pueden hacerlo.

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

o

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

Consulte también:

Redirecting TCP-traffic to a UNIX domain socket under Linux

+1

Gracias de todos modos, pero esto no es exactamente lo que quiero :) Quiero usar socket de Unix para el rendimiento y la estabilidad, pero si construyo un proxy en TCP y consultas hacia adelante los dos objetivos faltan. –

6

Actualización para MongoDB v3.x

Si actualiza a MongoDB 3.x en Linux, el grupo y otros permisos en /tmp/mongodb-27017.sock se han eliminado. Recibirá un permiso denegado de error cuando se conecte usando MongoClient (host = '/ tmp/mongodb-27017.sock')

Para solucionar esto, actualice su archivo de configuración de MongoDB al formato YAML, que incluye la opción filePermissions para que configure los permisos de vuelta.

Ejemplo /etc/mongod.conf en formato YAML:

storage: 
    dbPath: "/var/lib/mongodb" 
systemLog: 
    destination: file 
    path: "/var/log/mongodb/mongod.log" 
    logAppend: true 
net: 
    unixDomainSocket: 
     filePermissions: 0777 
Cuestiones relacionadas