Ich neige dazu, SQLite bei der Django- Entwicklung zu verwenden, aber auf einem Live-Server wird häufig etwas Robusteres benötigt ( z. B. MySQL / PostgreSQL ). Ausnahmslos müssen auch andere Änderungen an den Django-Einstellungen vorgenommen werden: unterschiedliche Protokollierungsorte / -intensitäten, Medienpfade usw.
Wie verwalten Sie all diese Änderungen, um die Bereitstellung zu einem einfachen, automatisierten Prozess zu machen?
Antworten:
Update: Django-Konfigurationen wurden veröffentlicht, was für die meisten Leute wahrscheinlich eine bessere Option ist als manuell.
Wenn Sie es vorziehen, Dinge manuell zu erledigen, gilt meine frühere Antwort immer noch:
Ich habe mehrere Einstellungsdateien.
settings_local.py
- Hostspezifische Konfiguration wie Datenbankname, Dateipfade usw.settings_development.py
- Konfiguration für die Entwicklung, zDEBUG = True
.settings_production.py
- Konfiguration für die Produktion, zSERVER_EMAIL
.Ich verbinde diese alle mit einer
settings.py
Datei, die zuerst importiert wirdsettings_local.py
, und dann mit einer der beiden anderen. Es entscheidet durch zwei Einstellungen im Inneren, welche geladen werden sollensettings_local.py
-DEVELOPMENT_HOSTS
undPRODUCTION_HOSTS
.settings.py
ruftplatform.node()
auf, um den Hostnamen des Computers zu ermitteln, auf dem er ausgeführt wird, sucht dann in den Listen nach diesem Hostnamen und lädt die zweite Einstellungsdatei, je nachdem, in welcher Liste der Hostname gefunden wird.Auf diese Weise müssen Sie sich nur wirklich darum kümmern, die
settings_local.py
Datei mit der hostspezifischen Konfiguration auf dem neuesten Stand zu halten, und alles andere wird automatisch erledigt.Schauen Sie sich hier ein Beispiel an .
quelle
_local
ziemlich verwirrend macht) und die Tatsache, dass Sie keine Module verwenden (Einstellungen /base.py, settings / local.py, settings / Production.py). Es wäre auch ratsam, dies in einem separaten Repository zu speichern ... noch besser, einem sicheren Dienst, der diese Informationen aus einer kanonischen Quelle bereitstellt (wahrscheinlich für die meisten übertrieben) ... damit für einen neuen Host keine neue Version erforderlich ist..py
die Hostliste in der Datei zu überprüfen und damit jedem Host Zugriff auf Informationen zur Konfiguration jedes anderen Hosts zu gewähren, können Sie die Datei "manage.py" mit Vorlagen versehen, um die entsprechenden Einstellungen zu verwenden Datei in Ihren Bereitstellungskonfigurationen.Persönlich verwende ich eine einzelne settings.py für das Projekt. Ich habe nur den Hostnamen nachgeschlagen, auf dem es sich befindet (meine Entwicklungsmaschinen haben Hostnamen, die mit "gabriel" beginnen, also habe ich nur Folgendes:
dann habe ich in anderen Teilen Dinge wie:
und so weiter. Ein bisschen weniger lesbar, aber es funktioniert gut und erspart das Jonglieren mehrerer Einstellungsdateien.
quelle
Am Ende von settings.py habe ich folgendes:
Auf diese Weise muss ich, wenn ich die Standardeinstellungen überschreiben möchte, settings_local.py direkt neben settings.py einfügen.
quelle
settings_local
zu einem führtImportError
,except
wird dieser lautlos verschluckt.No module named...
vs überprüfencannot import name...
, aber es ist spröde. Oder setzen Sie Ihre Importe in settings_local.py in try-Blöcken und lösen Sie eine spezifischere Ausnahme aus:MisconfiguredSettings
oder etwas in diesem Sinne.Ich habe zwei Dateien.
settings_base.py
die allgemeine / Standardeinstellungen enthält und in der Quellcodeverwaltung eingecheckt ist. Jede Bereitstellung verfügt über eine separate Bereitstellungsettings.py
, diefrom settings_base import *
zu Beginn ausgeführt und bei Bedarf überschrieben wird.quelle
settings_local.py
diesem Fallfrom settings import *
können Werte in überschrieben werdensettings.py
. (Diesettings_local.py
Datei muss am Ende von importiert werdensettings.py
).Der einfachste Weg, den ich gefunden habe, war:
1) Verwenden Sie die Standardeinstellung settings.py für die lokale Entwicklung und 2) erstellen Sie eineproduktionseinstellungen.py, beginnend mit:
Und dann überschreiben Sie einfach die Einstellungen, die sich in der Produktion unterscheiden:
quelle
In Bezug auf die Bereitstellung von Django selbst mit mehreren Datenbanken sollten Sie sich Djangostack ansehen . Sie können ein völlig kostenloses Installationsprogramm herunterladen, mit dem Sie Apache, Python, Django usw. installieren können. Im Rahmen des Installationsprozesses können Sie auswählen, welche Datenbank Sie verwenden möchten (MySQL, SQLite, PostgreSQL). Wir verwenden die Installationsprogramme häufig, wenn wir Bereitstellungen intern automatisieren (sie können im unbeaufsichtigten Modus ausgeführt werden).
quelle
Ich habe meine settings.py-Datei in einem externen Verzeichnis. Auf diese Weise wird es nicht in die Quellcodeverwaltung eingecheckt oder von einer Bereitstellung überschrieben. Ich habe dies zusammen mit den Standardeinstellungen in die Datei settings.py unter meinem Django-Projekt eingefügt:
Hinweis: Dies ist sehr gefährlich, wenn Sie local_settings.py nicht vertrauen können.
quelle
Zusätzlich zu den von Jim erwähnten Dateien mit mehreren Einstellungen füge ich normalerweise zwei Einstellungen in meine Datei settings.py oben ein
BASE_DIR
undBASE_URL
setze den Pfad des Codes und die URL zur Basis der Site. Alle anderen Einstellungen werden geändert sich diesen anhängen.BASE_DIR = "/home/sean/myapp/"
z.BMEDIA_ROOT = "%smedia/" % BASEDIR
Wenn ich das Projekt verschiebe, muss ich nur diese Einstellungen bearbeiten und nicht die gesamte Datei durchsuchen.
Ich würde auch empfehlen, sich Fabric und Capistrano (Ruby-Tool, aber es kann zum Bereitstellen von Django-Anwendungen verwendet werden) anzusehen, die die Automatisierung der Remote-Bereitstellung erleichtern.
quelle
Nun, ich benutze diese Konfiguration:
Am Ende von settings.py:
Und in locale_settings.py:
quelle
So viele komplizierte Antworten!
Jede settings.py-Datei enthält:
Ich benutze dieses Verzeichnis, um die DEBUG-Variable wie folgt festzulegen (ersetzen Sie sie durch das Verzeichnis, in dem sich Ihr Entwicklungscode befindet):
Jedes Mal, wenn die Datei settings.py verschoben wird, ist DEBUG False und Ihre Produktionsumgebung.
Jedes Mal, wenn Sie andere Einstellungen als die in Ihrer Entwicklungsumgebung benötigen, verwenden Sie einfach:
quelle
Ich denke, es hängt von der Größe der Site ab, ob Sie SQLite nicht mehr verwenden müssen. Ich habe SQLite erfolgreich auf mehreren kleineren Live-Sites verwendet und es läuft großartig.
quelle
Ich benutze die Umgebung:
Ich glaube, dies ist ein viel besserer Ansatz, da Sie möglicherweise spezielle Einstellungen für Ihre Testumgebung benötigen und diese problemlos zu dieser Bedingung hinzufügen können.
quelle
Dies ist ein älterer Beitrag, aber ich denke, wenn ich diesen nützlichen hinzufüge
library
, wird es die Dinge vereinfachen.Verwenden Sie die Django-Konfiguration
Schnellstart
Unterklassifizieren Sie dann die enthaltenen Konfigurationen.Konfigurationsklasse in den Einstellungen Ihres Projekts.py oder einem anderen Modul, das Sie zum Speichern der Einstellungskonstanten verwenden, z.
Setzen Sie die
DJANGO_CONFIGURATION
Umgebungsvariable auf den Namen der Klasse, die Sie gerade erstellt haben, z. B~/.bashrc
.:export DJANGO_CONFIGURATION=Dev
und die
DJANGO_SETTINGS_MODULE
Umgebungsvariable zum Modulimportpfad wie gewohnt, z. B. in bash:export DJANGO_SETTINGS_MODULE=mysite.settings
Alternativ können Sie die
--configuration
Option angeben, wenn Sie Django-Verwaltungsbefehle gemäß der Standardbefehlszeilenoption von Django verwenden--settings
, z.python manage.py runserver --settings=mysite.settings --configuration=Dev
So aktivieren Sie Django Ihre Konfiguration zu verwenden , haben Sie jetzt Ihre ändern manage.py oder wsgi.py django-Konfigurationen zu verwenden Versionen der entsprechenden Starterfunktionen, zB ein typisches Skript manage.py mit django-Konfigurationen würde wie folgt aussehen:
Beachten Sie, dass wir in Zeile 10 nicht das allgemeine Tool verwenden,
django.core.management.execute_from_command_line
sondern stattdessenconfigurations.management.execute_from_command_line
.Gleiches gilt für Ihre Datei wsgi.py , z.
Hier verwenden wir nicht die Standardfunktion
django.core.wsgi.get_wsgi_application
, sondernconfigurations.wsgi.get_wsgi_application
.Das ist es! Sie können Ihr Projekt jetzt mit manage.py und Ihrem bevorzugten WSGI-fähigen Server verwenden.
quelle
In der Tat sollten Sie wahrscheinlich in Betracht ziehen, dieselben (oder fast dieselben) Konfigurationen für Ihre Entwicklungs- und Produktionsumgebung zu verwenden. Andernfalls treten von Zeit zu Zeit Situationen wie "Hey, es funktioniert auf meinem Computer" auf.
Verwenden Sie Docker, um Ihre Bereitstellung zu automatisieren und diese WOMM-Probleme zu beseitigen .
quelle