Eltérő környezetek beállításainak kezelése Djangoval

Django alapú alkalmazásfejlesztésnél a settings modul hordozza a projektre jellemző konfigurációkat. Gyári kiszerelés esetén (django-admin.py startproject) ez tipikusan a settings.py fájl. Legyen bármilyen kis feladatról szó, célszerű az alkalmazás fejlesztői és éles környezetét szétválasztani. A két környezet adottságai nem szükségszerűen azonosak: eltérő adatbázis- és webkiszolgáló, más elérési útvonalak (path) sít. Hogyan lehet mégis a különböző szoftverkörnyezetek konfigurációját a settings modulban elkönyvelni?

Több megoldás is elképzelhető. Közkedvelt módszer az eltérő konfigurációkat a settings modulból egy új local_settings modulba átemelni, majd a settings modul végén a local_settings-et betölteni.

# settings.py

# ...

try:
    from local_settings import *
except ImportError:
    pass

A local_settings-et a verziókövető rendszerbe nem regisztráljuk, így deploy során nem írja felül a helyi változat a távoli modult.

A korlátja ennek a megközelítésnek, hogy nem áll módunkban verziókezelten hozzáférni a local_settings tartalmához, nem tudjuk azt az alkalmazással együtt menedzselni. Éles környezetben pedig kifejezetten veszélyes egy árva állomány direkt szerkesztése.

Egy rugalmasabb megoldás érdekében a local_settings alapötletét továbbgondolhatjuk. A settings.py állományt mozgassuk át a settings/__init__.py alá. (Pythonban mindkettő egyenértékű a settings modullal.) A settings/ mappában az eleddig környezetenként különálló local_settings.py fájlokat másoljuk be a környezetre utaló fájlnévvel: development.py, staging.py, production.py stb. Ezeket az állományokat is regisztráljuk a verziókövető rendszerbe. A local_settings.py fájlokba pedig környezetenként hívjuk meg a megfelelő modult, például fejlesztői gépen:

# local_settings.py

from settings.development import *

A settings modul tehát továbbra is a környezetek megegyező konfigurációját tartalmazza, míg az eltérő beállításokat külön Python modulokba tároltuk le. Minden verziókezelt, így a megszokott deploy folyamat része lesz ezen fájlok publikálása. Hogy adott környezetben melyik modul kerüljön betöltésre, azt a környezet egyszeri létrehozásakor tudjuk a local_settings.py-ban feljegyezni – és többet ehhez a fájlhoz nem is kell hozzányúlni.

17aug.

3 Comment for Eltérő környezetek beállításainak kezelése Djangoval

  1. RePa says:

    Pont nemreg kerdezte proclub/janoszen kollega, hogy en hogy szoktam csinalni, es en is kb. igy szoktam, de o kornyezeti valtozokkal szerette volna megoldani a dolgot, akkor pont nem jutott eszembe az egyertelmu, megpedig a DJANGO_SETTINGS_MODULE nevu kornyezeti valtozo, amit ha beallitunk, akkor a neki megadott modult hasznalja majd a settings.py helyett.

Szólj hozzá