115 votes

Comment configurer Django pour un développement et un déploiement simples ?

J'ai tendance à utiliser SQLite en faisant Django développement, mais sur un serveur live, quelque chose de plus robuste est souvent nécessaire ( MySQL / PostgreSQL par exemple). Invariablement, il y a d'autres modifications à apporter aux paramètres de Django également : différents emplacements / intensités de journalisation, chemins d'accès aux médias, etc.

Comment gérer tous ces changements pour faire du déploiement un un processus simple et automatisé ?

86voto

Jim Points 39574

Mise à jour : django-configurations a été publié, ce qui est probablement une meilleure option pour la plupart des gens que de le faire manuellement.

Si vous préférez faire les choses manuellement, ma réponse précédente reste valable :

J'ai plusieurs fichiers de paramètres.

  • settings_local.py - la configuration spécifique à l'hôte, comme le nom de la base de données, les chemins de fichiers, etc.
  • settings_development.py - configuration utilisée pour le développement, par exemple DEBUG = True .
  • settings_production.py - configuration utilisée pour la production, par exemple SERVER_EMAIL .

Je lie tout ça avec un settings.py qui importe d'abord settings_local.py et ensuite l'un des deux autres. Il décide lequel charger en fonction de deux paramètres internes settings_local.py - DEVELOPMENT_HOSTS et PRODUCTION_HOSTS . settings.py appelle platform.node() pour trouver le nom d'hôte de la machine sur laquelle il s'exécute, puis cherche ce nom d'hôte dans les listes, et charge le second fichier de configuration en fonction de la liste dans laquelle il trouve le nom d'hôte.

De cette façon, la seule chose dont vous devez vous soucier est de conserver le nom de l'entreprise. settings_local.py à jour avec la configuration spécifique de l'hôte, et tout le reste est géré automatiquement.

Consultez un exemple ici .

26voto

Gabriel Ross Points 2906

Personnellement, j'utilise un seul settings.py pour le projet, je lui fais juste chercher le nom d'hôte sur lequel il se trouve (mes machines de développement ont des noms d'hôtes qui commencent par "gabriel" donc j'ai juste ça :

import socket
if socket.gethostname().startswith('gabriel'):
    LIVEHOST = False
else: 
    LIVEHOST = True

puis dans d'autres parties, j'ai des choses comme :

if LIVEHOST:
    DEBUG = False
    PREPEND_WWW = True
    MEDIA_URL = 'http://static1.grsites.com/'
else:
    DEBUG = True
    PREPEND_WWW = False
    MEDIA_URL = 'http://localhost:8000/static/'

et ainsi de suite. C'est un peu moins lisible, mais cela fonctionne bien et évite d'avoir à jongler avec plusieurs fichiers de paramètres.

24voto

Dmitry Shevchenko Points 11398

À la fin de settings.py, j'ai ce qui suit :

try:
    from settings_local import *
except ImportError:
    pass

Ainsi, si je veux remplacer les paramètres par défaut, il me suffit de placer settings_local.py juste à côté de settings.py.

11voto

John Millikin Points 86775

J'ai deux fichiers. settings_base.py qui contient les paramètres communs/par défaut, et qui est vérifié dans le contrôle de la source. Chaque déploiement possède un settings.py qui exécute from settings_base import * au début, puis des remplacements si nécessaire.

7voto

Andre Bossard Points 4655

La méthode la plus simpliste que j'ai trouvée est la suivante :

1) utiliser la valeur par défaut paramètres.py pour le développement local et 2) créer un production-settings.py en commençant par :

import os
from settings import *

Et ensuite, il suffit de remplacer les paramètres qui diffèrent dans la production :

DEBUG = False
TEMPLATE_DEBUG = DEBUG

DATABASES = {
    'default': {
           ....
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X