[pyar] Django como servicio web

Manuel Kaufmann humitos en gmail.com
Lun Jun 23 14:02:38 ART 2014


Hola,

Estoy migrando un Proyecto Django para convertirlo en una Aplicación
Django con el fin de alojar muchos sitios en una sola instancia de
Django (en pocas palabras). Para eso, el servidor va a hostear muchos
nombres de dominios y, dependiendo de eso, se debería mostrar X o Y
(datos, templates, demáses)

Esto quiere decir que todos los sitios "instalados" en mi instancia de
Django van a tener las mismas tablas de datos -pero no deben compartir
información- e incluso, puede ser que haya algunas pequeñas
modificaciones en esas tablas. Por ejemplo, un sitio puede ser pago y
tener un BooleanField llamado "ya_pago" en la tabla UserProfile y los
otros sitios no tener ese Field.

Entonces, estuve buscando información y caí en maejar estas dos opciones:

 1) Usar Sites Framework

Un perno. Tengo que cambiar toda la implementación del sitio para
filtrar por Site y agregar un Field a cada uno de mis modelos. Además,
tampoco me queda la información separada ya que usaría la misma DB y
los datos estarían todos mezclados...

No me gustó mucho esa aproximación...

 2) Usar Múltiples Databases

Hasta ahora, no encontré una forma de decir: "si viene de
foo.example.com, utilizar la DB 'foo' y si viene de bar.example.com
utilizar la DB 'bar' " :(

Lo que encontré es una aproximación a lo que quiero: usas SCHEMAS;
pero casi que estoy en lo mismo que arriba: una sola DB con todos los
datos mezclados pero asignados a un SCHEMA.

https://github.com/bernardopires/django-tenant-schemas/

Por otro lado, encontré este:

https://github.com/mik3y/django-db-multitenant

que implementa "muy bien" eso pero solo funciona en MySQL y yo lo
necesito en PostgreSQL. Estoy viendo qué tan complicado puede ser
modificarlo para que se la banque. Igualmente, si lo hago, tampoco
podría medir los riesgos que estaría corriendo ya que hay un tema con
los threads de Django en este approach :S

¿Sugerencias? ¿Opiniones? ¿Etcéteras?

¿Han tenido este problema? ¿Cómo lo resolvieron?

Gracias. Muchas gracias, y hasta luego.

=== Lo que estuve leyendo ===

 * http://en.wikipedia.org/wiki/Multitenancy

 * https://docs.djangoproject.com/en/dev/ref/contrib/sites/
 * https://docs.djangoproject.com/en/dev/ref/contrib/sites/#the-currentsitemanager

 * https://docs.djangoproject.com/en/dev/topics/db/multi-db/

 * http://stackoverflow.com/questions/16721051/multi-tenant-django-applications-altering-database-connection-per-request
 * http://stackoverflow.com/questions/7970872/how-to-use-a-different-database-per-application-instance-in-django

 * https://github.com/mik3y/django-db-multitenant (MySQL-only (this
should be fixed eventually).)

 * https://github.com/bernardopires/django-tenant-schemas/
   * http://www.postgresql.org/docs/9.1/static/ddl-schemas.html

-- 
Kaufmann Manuel
-- http://elblogdehumitos.com.ar


More information about the pyar mailing list