2012-06-04 11 views
9

estoy en el proceso de aprendizaje de Django y Python (así como la programación en general). En aras de la simplicidad, estoy usando sqlite3 como mi base de datos mientras estoy repasando tutoriales para Django y tal.¿Puedo hacer que la ruta de la base de datos de Django (para sqlite3) sea "multiplataforma"?

Soy un usuario multiplataforma (Mac OS, Windows, Linux) dependiendo de dónde estoy en ese momento. Entonces, lo que hice fue poner mis proyectos de programación en mi Dropbox para poder trabajar en el mismo código desde cualquier lugar.

El problema es que, en el archivo settings.py para un proyecto particular, se especifica la ruta de la base de datos de este modo:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3',        # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'C:/Users/David/Dropbox/programming/mysite/database',  # Or path to database file if using sqlite3. 

... pero cuando estoy usando MacOS o Linux, obviamente, el C:/estrangulaciones. Me preguntaba si alguien sugirió un remedio simple para esto. Por supuesto, una forma de hacerlo sería configurar mi base de datos de forma remota en mi servidor web a través de MySQL o algo así, pero pensé que podría haber una forma simple de hacerlo, como con una declaración 'if'.

+0

OT: ¿Puedo preguntarle cómo haces para trabajar multiplataforma? ¿Instalaste el Python específico del os en cada máquina que usaste? ¿Has configurado un virtualenv en cada máquina también? thx – Bakaburg

Respuesta

0
No

una gran solución, pero que sólo podría probar qué plataforma se está ejecutando en, como:

import platform 
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>' 
+0

¡Salud! Apreciar la ayuda. –

22

Usando relative paths in settings.py es una bastante común que se considera una buena práctica por muchos. Algo como esto puede ayudar.

from os.path import dirname, join 

PROJECT_DIR = dirname(__file__) 

DATABASES = { 
    # ... 
    'NAME': join(PROJECT_DIR, 'your_db_name.db'), 
    # ... 
} 
+0

Muchas gracias. :) –

2

Utilizo los dos métodos anteriores cuando corresponda. Las rutas relativas están en todos mis proyectos, pero algunas requieren una detección de plataforma.

Un tercer método es importar un archivo de control de versión local_settings exterior en el archivo de configuración principal. from local_settings import * - este archivo de configuración local puede ser diferente para cada entorno. Si desea ser elegante, puede instalar algún tipo de detección de entorno que le convenga e importar el archivo de windows, osx o linux apropiado.

Este método es limpio y probablemente preferible si tiene tres ambientes, ya que no el desorden de su settings.py con todas las configuraciones de entorno.

Django Local Settings

yo personalmente tienen archivos de configuración aún más granulares para cada entorno como un archivo de opciones de base de datos (a veces, quiero una base de datos SQLite en blanco para restablecer fácilmente), lo que permite S3, la barra de depuración, desarrollo local (depuración de plantillas, depuración de miniaturas, etc.), el almacenamiento en memoria caché se activa/desactiva para que pueda mezclar y combinar todo lo que necesito para la producción, la puesta en escena, varios niveles de depuración provisional y el desarrollo local.

+0

La respuesta aceptada a esa pregunta se ha vinculado a es impecable y también una mejor práctica - envolver el 'de local_settings importar *' en un intento de captura. http://stackoverflow.com/a/4909964/169121 – istruble

+0

Mucho aprecio la ayuda :) –

Cuestiones relacionadas