Django: Wie verwalte ich Entwicklungs- und Produktionseinstellungen?

128

Ich habe eine Basis-App entwickelt. In der Bereitstellungsphase wurde klar, dass ich sowohl lokale Einstellungen als auch Produktionseinstellungen benötige.

Es wäre toll, Folgendes zu wissen:

  • Wie man am besten mit Entwicklungs- und Produktionseinstellungen umgeht.
  • So behalten Sie Apps wie die Django-Debug-Symbolleiste nur in einer Entwicklungsumgebung.
  • Alle anderen Tipps und Best Practices für Entwicklungs- und Bereitstellungseinstellungen.
Kristian Roebuck
quelle

Antworten:

107

Die DJANGO_SETTINGS_MODULEUmgebungsvariable steuert, welche Einstellungsdatei Django geladen wird.

Sie erstellen daher separate Konfigurationsdateien für Ihre jeweiligen Umgebungen (beachten Sie, dass diese natürlich beide import *aus einer separaten Datei mit gemeinsam genutzten Einstellungen stammen können) und DJANGO_SETTINGS_MODULEsteuern, welche verwendet werden soll.

Hier ist wie:

Wie in der Django-Dokumentation angegeben:

Der Wert von DJANGO_SETTINGS_MODULE sollte in der Python-Pfadsyntax angegeben werden, z. B. mysite.settings. Beachten Sie, dass sich das Einstellungsmodul im Python-Importsuchpfad befinden sollte.

Nehmen wir also an, Sie haben myapp/production_settings.pyund myapp/test_settings.pyin Ihrem Quell-Repository erstellt.

In diesem Fall würden Sie jeweils DJANGO_SETTINGS_MODULE=myapp.production_settingsdie erstere und DJANGO_SETTINGS_MODULE=myapp.test_settingsdie letztere verwenden.


Von hier an läuft das Problem darauf hinaus, die DJANGO_SETTINGS_MODULEUmgebungsvariable festzulegen.

Einstellung DJANGO_SETTINGS_MODULEmit einem Skript oder einer Shell

Sie können dann ein Bootstrap-Skript oder einen Prozessmanager verwenden, um die richtigen Einstellungen zu laden (indem Sie die Umgebung festlegen), oder sie einfach von Ihrer Shell aus ausführen, bevor Sie Django starten : export DJANGO_SETTINGS_MODULE=myapp.production_settings.

Beachten Sie, dass Sie diesen Export jederzeit über eine Shell ausführen können - er muss nicht in Ihrer .bashrcoder einer anderen Umgebung leben.

Einstellung DJANGO_SETTINGS_MODULEmit einem Prozessmanager

Wenn Sie nicht gerne ein Bootstrap-Skript schreiben, das die Umgebung festlegt (und es gibt sehr gute Gründe, sich so zu fühlen!), Würde ich die Verwendung eines Prozessmanagers empfehlen:


Schließlich , dass Anmerkung Sie können die Vorteile des nehmen PYTHONPATHVariable die Einstellungen in einem ganz anderen Ort zu speichern (zB auf einem Produktionsserver, speichern sie in /etc/). Dies ermöglicht das Trennen der Konfiguration von Anwendungsdateien. Sie können das wollen oder nicht, es hängt davon ab, wie Ihre App strukturiert ist.

Thomas Orozco
quelle
7
Da die settings.pyDatei SiteName/settings.pystandardmäßig gespeichert ist , sollte zur Verdeutlichung, wenn Sie Ihre alternativen Einstellungsdateien in demselben Verzeichnis ablegen, die zu bin / activ hinzugefügte Zeile lauten. DJANGO_SETTINGS_MODULE="SiteName.test_settings"Andernfalls ausgezeichnete Antwort!
Alexbhandari
2
Zufällig kennen Sie ein Tutorial, wie man dies Schritt für Schritt macht. Ich bin neu in Django und weiß nicht, wo ich DJANGO_SETTINGS_MODULE oder PYTHONPATH
Jesus Almaral - Hackaprende
Diese Lösung scheint für eine conda env nicht zu gelten. In einer Conda-Umgebung befindet sich kein Bin / Activate.
Pouya Yousefi
1
@PouyaYousefi: Sie absolut nicht brauchen diese Antwort zu verwenden virtualenv zu verwenden. Die Antwort besteht aus zwei Schritten: a) Verwenden Sie separate Einstellungsdateien und b) DJANGO_SETTINGS_MODULEWählen Sie die gewünschte aus. Das Ändern bin/activate ist eine, um Letzteres zu tun (TBH, ich denke nicht, dass dies sowieso eine gute Idee ist, also habe ich das herausgenommen), aber es ist nicht die einzige.
Thomas Orozco
Dies ist auch nützlich, wenn Sie Django in der Pycharm Community Edition verwenden und Unit-Tests sowohl in der Befehlszeile als auch in der Pycharm Community korrekt ausführen müssen. Angenommen, Sie haben nur eine einfache Konfigurationsdatei in myapp / settings.py in Ihrem Quellrepository erstellt. In diesem Fall würden Sie "DJANGO_SETTINGS_MODULE = myapp.settings" im Menü "RUN / Konfiguration bearbeiten / Umgebungsvariable" festlegen, um diese zum Ausführen von Testfällen zu verwenden.
F.Tamy
57

Verwenden Sie standardmäßig die Produktionseinstellungen, erstellen Sie jedoch eine Datei, die settings_dev.pyim selben Ordner wie Ihre settings.pyDatei aufgerufen wird . Fügen Sie dort Überschreibungen hinzu, z DEBUG=True.

Fügen Sie auf dem Computer, der für die Entwicklung verwendet wird, Folgendes zu Ihrer ~/.bashrcDatei hinzu:

export DJANGO_DEVELOPMENT=true

Fügen Sie am Ende Ihrer settings.pyDatei Folgendes hinzu.

# Override production variables if DJANGO_DEVELOPMENT env variable is set
if os.environ.get('DJANGO_DEVELOPMENT'):
    from settings_dev import *  # or specific overrides

(Beachten Sie, dass das Importieren *in Python generell vermieden werden sollte.)

Standardmäßig überschreiben die Produktionsserver nichts. Getan!

Im Vergleich zu den anderen Antworten ist diese Antwort einfacher, da keine Aktualisierung PYTHONPATHoder Einstellung erforderlich ist , mit DJANGO_SETTINGS_MODULEder Sie jeweils nur an einem Django-Projekt arbeiten können.

cs01
quelle
8
Wie ist das nicht die richtige Antwort? SO ist heutzutage wirklich ein Chaos. Ty cs01
codyc4321
if os.environ.get('DJANGO_DEVELOPMENT', 'true')funktioniert auch. Ich erwähne dies nur, weil die obige is not trueMethode für mich unter Python 3.6 nicht importiert werden konnte.
Brt
1
@brt das ist eine schlechte Idee: Es werden immer Ihre DEVEinstellungen verwendet, die private Daten auf einem öffentlichen Server verlieren . Sie möchten wirklich nur überprüfen, ob die DJANGO_DEVELOPMENTUmgebungsvariable vorhanden ist (dh is not None).
CS01
Danke für die Info, @ cs01. Ich habe festgestellt, dass ich etwas falsch gemacht habe, als ich meine Website mit falschen Einstellungen in die Luft gesprengt habe, aber ich war mir nicht sicher, warum settings_dev.pyauf den Server geladen wurde.
Brt
2
@ cs01 Ich würde so weit gehen, um sicherzustellen, dass es existiert und wahr ist, indem ich einfach den is not NoneScheck ablege . Auch os.getenvist die Kurzschrift
Tjorriemorrie
35

Normalerweise habe ich eine Einstellungsdatei pro Umgebung und eine freigegebene Einstellungsdatei:

/myproject/
  settings.production.py
  settings.development.py
  shared_settings.py

Jede meiner Umgebungsdateien enthält:

try:
    from shared_settings import *
except ImportError:
    pass

Auf diese Weise kann ich freigegebene Einstellungen bei Bedarf überschreiben (indem ich die Änderungen unter dieser Zeilengruppe hinzufüge).

Ich wähle dann die zu verwendenden Einstellungsdateien aus, indem ich sie mit settings.py verknüpfe:

ln -s settings.development.py settings.py
Daniel Watkins
quelle
2
Wie gehen Sie mit dem Verbot von pep8 um import *? Deaktivieren Sie diese Prüfung? Ich habe diesen Import in eine eingeschlossen, exec()aber dann kann ich keine Bedingungen für Variablen haben, die nicht in dieser Datei definiert sind, noch kann ich eine INSTALLED_APPSVariable ändern , weil sie "undefiniert" ist
Mikhail
11
Wir fusseln unsere Einstellungsdateien nicht, weil sie nicht wirklich Code sind, sondern Konfigurationen, die in Python ausgedrückt werden.
Daniel Watkins
17

So mache ich es in 6 einfachen Schritten:

  1. Erstellen Sie einen Ordner in Ihrem Projektverzeichnis und benennen Sie ihn settings.

    Projektstruktur:

    myproject/
           myapp1/
           myapp2/              
           myproject/
                  settings/
  2. Erstellen Sie vier Python - Dateien innerhalb des settingsVerzeichnisses nämlich __init__.py, base.py, dev.pyundprod.py

    Einstellungsdateien:

    settings/
         __init__.py
         base.py
         prod.py
         dev.py 
  3. Öffnen Sie es __init__.pyund füllen Sie es mit folgendem Inhalt:

    init .py:

    from .base import *
    # you need to set "myproject = 'prod'" as an environment variable
    # in your OS (on which your website is hosted)
    if os.environ['myproject'] == 'prod':
       from .prod import *
    else:
       from .dev import *
  4. Öffnen Sie es base.pyund füllen Sie es mit allen allgemeinen Einstellungen (die sowohl in der Produktion als auch in der Entwicklung verwendet werden), zum Beispiel:

    base.py:

    import os
    ...
    INSTALLED_APPS = [...]
    MIDDLEWARE = [...]
    TEMPLATES = [{...}]
    ...
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    MEDIA_ROOT = os.path.join(BASE_DIR, '/path/')
    MEDIA_URL = '/path/'
  5. Öffnen dev.pyund fügen Sie das entwicklungsspezifische Material hinzu, zum Beispiel:

    dev.py:

    DEBUG = True
    ALLOWED_HOSTS = ['localhost']
    ...
  6. Öffnen prod.pyund fügen Sie das produktionsspezifische Material hinzu, zum Beispiel:

    prod.py:

    DEBUG = False
    ALLOWED_HOSTS = ['www.example.com']
    LOGGING = [...]
    ...
Ahtisham
quelle
10

Erstellen Sie mehrere settings*.pyDateien und extrapolieren Sie die Variablen, die sich pro Umgebung ändern müssen. Dann am Ende Ihrer Master- settings.pyDatei:

try:
  from settings_dev import *
except ImportError:
  pass

Sie behalten die separaten settings_*Dateien für jede Stufe.

Fügen Sie oben in Ihrer settings_dev.pyDatei Folgendes hinzu:

import sys
globals().update(vars(sys.modules['settings']))

So importieren Sie Variablen, die Sie ändern müssen.

Dieser Wiki-Eintrag enthält weitere Ideen zum Aufteilen Ihrer Einstellungen.

Burhan Khalid
quelle
Danke Burham! Bei der Bereitstellung der App müsste ich nur die Datei settings_dev entfernen, um meine Bereitstellungseinstellungen in Aktion zu sehen.
Kristian Roebuck
Ja, oder ersetzen Sie den Import durchsettings_prod.py
Burhan Khalid
1
Wenn Sie die Datei master settings.py in einer Bereitstellung bearbeiten, kommt es jedoch zu Konflikten mit der Versionskontrolle, sodass dies nicht unbedingt der beste Weg ist. Ich würde sagen, dass die Option von Thomas Orozco am besten ist - Sie können das DJANGO_SETTINGS_MODULE in Ihrem virtuellen Postaktivierungsskript oder in Ihrem Gunicorn- oder Mod_wsgi-Setup
festlegen
1
Vielleicht sollte erwähnt werden, dass Sie die quellenspezifischen Dateien niemals zur Quellcodeverwaltung hinzufügen. Ich nahm an, dass verstanden wurde, dass Sie keine Einstellungen verschieben würden, die für eine Phase eines Projekts spezifisch sind.
Burhan Khalid
Wenn Sie virtualenv verwenden, werden normalerweise standardmäßig {{Projektname}}. Einstellungen verwendet. "Einstellungen" sind also kein Schlüssel in sys.modules. Es wird 'myproject.settings' sein (oder wie auch immer Ihr Projektname lautet). Sie können verwenden modname = "%s.settings" % ".".join(__name__.split('.')[:-1]), um den vollständigen Modulnamen zu erhalten und dann globals().update(vars(sys.modules[modname])). Ich finde, das funktioniert gut für mich. Natürlich würde es in den meisten Fällen wahrscheinlich auch funktionieren, auf das programmgesteuerte Bestimmen des Modulnamens zugunsten eines Strings zu verzichten.
Eric
9

Ich benutze die fantastischen Django-Konfigurationen und alle Einstellungen sind in meinem gespeichert settings.py:

from configurations import Configuration

class Base(Configuration):
    # all the base settings here...
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ...

class Develop(Base):
    # development settings here...
    DEBUG = True 
    ...

class Production(Base):
    # production settings here...
    DEBUG = False

Um das Django-Projekt zu konfigurieren, habe ich nur die Dokumente befolgt .

Riccardo Leschiutta
quelle
7

Hier ist der Ansatz, den wir verwenden:

  • ein settingsModul zum Aufteilen von Einstellungen in mehrere Dateien zur besseren Lesbarkeit;
  • eine .env.jsonDatei zum Speichern von Anmeldeinformationen und Parametern, die aus unserem Git-Repository ausgeschlossen werden sollen oder die umgebungsspezifisch sind;
  • eine env.pyDatei zum Lesen der .env.jsonDatei

Betrachtet man die folgende Struktur:

...
.env.json           # the file containing all specific credentials and parameters
.gitignore          # the .gitignore file to exclude `.env.json`
project_name/       # project dir (the one which django-admin.py creates)
  accounts/         # project's apps
    __init__.py
    ...
  ...
  env.py            # the file to load credentials
  settings/
    __init__.py     # main settings file
    database.py     # database conf
    storage.py      # storage conf
    ...
venv                # virtualenv
...

Mit .env.jsonwie:

{
    "debug": false,
    "allowed_hosts": ["mydomain.com"],
    "django_secret_key": "my_very_long_secret_key",
    "db_password": "my_db_password",
    "db_name": "my_db_name",
    "db_user": "my_db_user",
    "db_host": "my_db_host",
}

Und project_name/env.py:

<!-- language: lang-python -->
import json
import os


def get_credentials():
    env_file_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    with open(os.path.join(env_file_dir, '.env.json'), 'r') as f:
        creds = json.loads(f.read())
    return creds


credentials = get_credentials()

Wir können die folgenden Einstellungen haben:

<!-- language: lang-py -->
# project_name/settings/__init__.py
from project_name.env import credentials
from project_name.settings.database import *
from project_name.settings.storage import *
...

SECRET_KEY = credentials.get('django_secret_key')

DEBUG = credentials.get('debug')

ALLOWED_HOSTS = credentials.get('allowed_hosts', [])

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    ...
]

if DEBUG:
    INSTALLED_APPS += ['debug_toolbar']

...

# project_name/settings/database.py
from project_name.env import credentials

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': credentials.get('db_name', ''),
        'USER': credentials.get('db_user', ''),
        'HOST': credentials.get('db_host', ''),
        'PASSWORD': credentials.get('db_password', ''),
        'PORT': '5432',
    }
}

Die Vorteile dieser Lösung sind:

  • benutzerspezifische Anmeldeinformationen und Konfigurationen für die lokale Entwicklung, ohne das Git-Repository zu ändern;
  • Umgebungsspezifische Konfiguration können Sie beispielsweise drei verschiedene Umgebungen mit drei verschiedenen Umgebungen .env.jsonwie Entwicklung, Staffelung und Produktion haben.
  • Anmeldeinformationen befinden sich nicht im Repository

Ich hoffe, das hilft. Lassen Sie mich einfach wissen, wenn Sie bei dieser Lösung Vorbehalte feststellen.

Charlesthk
quelle
unter der Annahme , wo envmit zu ersetzen ist dev, produsw.? Was geht in die alte settings.pyDatei? Was ist drin storage.pyund database.py?
Dbinott
Hallo @dbinott, Sie können die env.pyDatei einfach aktualisieren , so dass Sie mit einer Umgebungsvariablen auswählen können, welche Datei geladen werden soll
Charlesthk
Zum Beispiel: conf = os.environ.get ('CONF', '') file_ = f ".env. {Conf} .json"
Charlesthk
Warum sollten Sie im Gegensatz zu einem nativen Python-Datentyp json?
Luftangriff
4

Ich benutze die folgende Dateistruktur:

project/
   ...
   settings/
   settings/common.py
   settings/local.py
   settings/prod.py
   settings/__init__.py -> local.py

So __init__.pyist ein Link (in Unix oder Mklink in Windows) zu local.pyoder kann zu sein, prod.pydamit die Konfiguration noch im project.settingsModul sauber und organisiert ist, und wenn Sie eine bestimmte Konfiguration verwenden möchten, können Sie die Umgebungsvariable verwenden, DJANGO_SETTINGS_MODULEum, project.settings.prodwenn Sie benötigen um einen Befehl für die Produktionsumgebung auszuführen.

In den Dateien prod.pyund local.py:

from .shared import *

DATABASE = {
    ...
}

und die shared.pyDatei bleibt ohne bestimmte Konfigurationen global.

Felipe Buccioni
quelle
3

Aufbauend auf der Antwort von cs01:

Wenn Sie Probleme mit der Umgebungsvariablen haben, setzen Sie ihren Wert auf eine Zeichenfolge (z DJANGO_DEVELOPMENT="true". B. habe ich ).

Ich habe auch den Datei-Workflow von cs01 wie folgt geändert:

#settings.py
import os
if os.environ.get('DJANGO_DEVELOPMENT') is not None:
    from settings_dev import * 
else:
    from settings_production import *
#settings_dev.py
development settings go here
#settings_production.py
production settings go here

Auf diese Weise muss Django nicht die gesamte Einstellungsdatei durchlesen, bevor die entsprechende Einstellungsdatei ausgeführt wird. Diese Lösung ist nützlich, wenn Ihre Produktionsdatei Dinge benötigt, die sich nur auf Ihrem Produktionsserver befinden.

Hinweis: in Python 3, importierte Dateien benötigen , um ein .angehängt (z from .settings_dev import *)

Brian Lee
quelle
1

Wenn Sie 1 Einstellungsdatei behalten möchten und Ihr Entwicklungsbetriebssystem sich von Ihrem Produktionsbetriebssystem unterscheidet, können Sie dies am Ende Ihrer settings.py einfügen:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
    # some special setting here for when I'm on my prod server
elif platform == "darwin":
    # OS X
    # some special setting here for when I'm developing on my mac
elif platform == "win32":
    # Windows...
    # some special setting here for when I'm developing on my pc

Lesen Sie mehr: Wie überprüfe ich das Betriebssystem in Python?

Benutzer
quelle
1

Dies scheint beantwortet worden zu sein, aber eine Methode, die ich in Kombination mit der Versionskontrolle verwende, ist die folgende:

Richten Sie eine env.py-Datei im selben Verzeichnis wie die Einstellungen in meiner lokalen Entwicklungsumgebung ein, die ich auch zu .gitignore hinzufüge:

env.py:

#!usr/bin/python

DJANGO_ENV = True
ALLOWED_HOSTS = ['127.0.0.1', 'dev.mywebsite.com']

.gitignore:

mywebsite/env.py

settings.py:

if os.path.exists(os.getcwd() + '/env.py'):
    #env.py is excluded using the .gitignore file - when moving to production we can automatically set debug mode to off:
    from env import *
else:
    DJANGO_ENV = False

DEBUG = DJANGO_ENV

Ich finde nur, dass dies funktioniert und viel eleganter ist - mit env.py ist es einfach, unsere lokalen Umgebungsvariablen zu sehen, und wir können all dies ohne mehrere settings.py-Dateien oder ähnliches verarbeiten. Mit dieser Methode können alle Arten von lokalen Umgebungsvariablen verwendet werden, die nicht auf unserem Produktionsserver festgelegt werden sollen. Durch die Verwendung des .gitignore über die Versionskontrolle halten wir auch alles nahtlos integriert.


quelle
Einfachste Lösung. Man kann auch alles in einer ConfigKlasse innerhalb einer env.pyDatei definieren. Anstelle von a import *kann das Modul dann von importiert werden from env import Config. Auf diese Weise müssen Sie das auch nicht verwenden, wenn Sie os.pathprüfen, was das Ganze viel einfacher macht.
Siddharth Pant
0

Verwendung settings.pyfür die Produktion. Im selben Verzeichnis settings_dev.pyfür Überschreibungen erstellen .

# settings_dev.py

from .settings import * 

DEBUG = False

Führen Sie auf einer Entwicklungsmaschine Ihre Django-App aus mit:

DJANGO_SETTINGS_MODULE=<your_app_name>.settings_dev python3 manage.py runserver

Auf einer Prod-Maschine laufen, als ob Sie gerade hatten settings.pyund sonst nichts.

VORTEILE

  1. settings.py (für die Produktion verwendet) ist völlig unabhängig von der Tatsache, dass es sogar andere Umgebungen gibt.
  2. Um den Unterschied zwischen Prod und Dev zu erkennen, schauen Sie einfach in einen einzelnen Ort - settings_dev.py. Keine Notwendigkeit, Konfigurationen zu sammeln, die über und verstreut settings_prod.pysind .settings_dev.pysettings_shared.py
  3. Wenn jemand Ihrer Prod-Konfiguration nach der Behebung eines Produktionsproblems eine Einstellung hinzufügt, können Sie sicher sein, dass diese auch in Ihrer Dev-Konfiguration angezeigt wird (sofern nicht ausdrücklich überschrieben). Dadurch wird die Divergenz zwischen verschiedenen Konfigurationsdateien minimiert.
Alex Yursha
quelle
0

Für das Problem beim Einstellen von Dateien habe ich mich für das Kopieren entschieden

Project
   |---__init__.py   [ write code to copy setting file from subdir to current dir]
   |---settings.py  (do not commit this file to git)
   |---setting1_dir
   |         |--  settings.py
   |---setting2_dir
   |         |--  settings.py

Wenn Sie django ausführen, wird __init__py ausgeführt. Zu diesem Zeitpunkt settings.py in setting1_dirwird ersetzt settings.py in Project.

Wie wähle ich eine andere Umgebung?

  • __init__.pydirekt ändern .
  • Erstellen Sie eine Bash-Datei zum Ändern __init__.py.
  • Ändern Sie env unter Linux und lassen __init__.pySie diese Variable dann lesen.

Warum auf diese Weise verwenden?

Da ich nicht so viele Dateien im selben Verzeichnis mag, verwirren zu viele Dateien andere Partner und sind für IDE nicht sehr gut. (IDE kann nicht finden, welche Datei wir verwenden.)

Wenn Sie nicht alle diese Details sehen möchten, können Sie das Projekt in zwei Teile teilen.

  1. Machen Sie Ihr kleines Tool wie Spring Initializr, nur um Ihr Projekt einzurichten.
  2. Ihren Projektcode
Kyakya
quelle
0

Ich verwende eine andere app.yaml-Datei, um die Konfiguration zwischen Umgebungen in der Google Cloud App Engine zu ändern.

Sie können dies verwenden, um eine Proxy-Verbindung in Ihrem Terminalbefehl herzustellen:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:1433

https://cloud.google.com/sql/docs/sqlserver/connect-admin-proxy#macos-64-bit

Datei: app.yaml

# [START django_app]
service: development
runtime: python37

env_variables:
  DJANGO_DB_HOST: '/cloudsql/myproject:myregion:myinstance'
  DJANGO_DEBUG: True

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
# [END django_app]
Rodrigo Grossi
quelle
-1

Dies ist meine Lösung mit unterschiedlichen Umgebungen für Entwickler, Test und Produkt

import socket

[...]

DEV_PC = 'PC059'
host_name = socket.gethostname()

if host_name == DEV_PC:
   #do something
   pass
elif [...]
Massimo Variolo
quelle