From 96181f507570db6bccda0e34b62eeac4882bcaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Sat, 13 Jan 2024 23:07:59 +0200 Subject: [PATCH] e11sync-gunicorn is a bit easier to use --- app/e11sync/settings.py | 24 ++++++++++++++++++++---- flake.nix | 18 +++++++++++++----- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/app/e11sync/settings.py b/app/e11sync/settings.py index 2157271..8f7ec96 100644 --- a/app/e11sync/settings.py +++ b/app/e11sync/settings.py @@ -1,13 +1,29 @@ from pathlib import Path -from os import environ +from os import environ, path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent _DEBUG = bool(environ.get('E11SYNC_DEBUG', False)) _COMPRESS_OFFLINE = bool(environ.get('E11SYNC_COMPRESS_OFFLINE', False)) _STATIC_ROOT = environ.get('E11SYNC_STATIC_ROOT', '/tmp/e11sync-static') _GEOIP_PATH = environ.get('GEOIP_PATH') +if db := environ.get('E11SYNC_DATABASE_PATH'): + _DATABASE_PATH = db +else: + if statedir := environ.get('STATE_DIRECTORY'): + _DATABASE_PATH = path.join(statedir, 'db.sqlite3') + else: + _DATABASE_PATH = BASE_DIR / 'db.sqlite3' -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent +# otherwise it gets printed twice +if not environ.get("E11SYNC_DEBUG_PRINTED"): + print("DEBUG={}".format(_DEBUG)) + print("COMPRESS_OFFLINE={}".format(_COMPRESS_OFFLINE)) + print("STATIC_ROOT={}".format(_STATIC_ROOT)) + print("GEOIP_PATH={}".format(_GEOIP_PATH)) + print("DATABASE_PATH={}".format(_DATABASE_PATH)) + environ["E11SYNC_DEBUG_PRINTED"] = "1" ######################################## ## No more side effects after this place @@ -67,7 +83,7 @@ WSGI_APPLICATION = 'e11sync.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'NAME': _DATABASE_PATH, } } diff --git a/flake.nix b/flake.nix index e3aa751..039da0b 100644 --- a/flake.nix +++ b/flake.nix @@ -68,8 +68,8 @@ ''; installPhase = ''mv static $out''; }; - packages.e11sync-gunicorn = pkgs.stdenv.mkDerivation { - name = "e11sync-gunicorn"; + packages.e11sync = pkgs.stdenv.mkDerivation { + name = "e11sync"; propagatedBuildInputs = [runtimeDeps]; nativeBuildInputs = [pkgs.makeWrapper]; src = self; @@ -77,7 +77,7 @@ buildPhase = '' mkdir -p $out; cp -r ${self}/app $out - makeWrapper ${pkgs.python3Packages.gunicorn}/bin/gunicorn $out/bin/entrypoint \ + makeWrapper ${pkgs.python3Packages.gunicorn}/bin/gunicorn $out/bin/e11sync-gunicorn \ --chdir $out/app \ --set-default E11SYNC_HTTP_PORT ${toString gunicornPort} \ --set E11SYNC_DEBUG "" \ @@ -85,6 +85,9 @@ --set GEOIP_PATH "${geoip}" \ --add-flags --bind=127.0.0.1:\$E11SYNC_HTTP_PORT \ --add-flags e11sync.wsgi + + makeWrapper $out/app/manage.py $out/bin/e11sync \ + --set GEOIP_PATH "${geoip}" ''; passthru.tests = { simple = @@ -100,12 +103,17 @@ }; }; - checks.e11sync = packages.e11sync-gunicorn.passthru.tests.simple; + checks.e11sync = packages.e11sync.passthru.tests.simple; apps.e11sync-gunicorn = { type = "app"; name = "e11sync-gunicorn"; - program = "${packages.e11sync-gunicorn}/bin/entrypoint"; + program = let + wrapper = pkgs.writeShellScript "wrapper" '' + export E11SYNC_DATABASE_PATH=$PWD/db.sqlite3 + exec ${packages.e11sync}/bin/e11sync-gunicorn + ''; + in "${wrapper}"; }; devShells.default = pkgs.mkShellNoCC {