From 3e67d6cf7155b468803b0d85df3dac76785f8c7f Mon Sep 17 00:00:00 2001 From: erjemin Date: Thu, 16 Apr 2026 21:10:58 +0300 Subject: [PATCH] mod: switch dev to sqlite and add static fallback paths --- database/.gitignore | 3 ++ oknardia/oknardia/settings.py | 63 ++++++++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 database/.gitignore diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..c59ab23 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1,3 @@ +# Это папака для хранения базы данных SQLite, не должна быть в репозитории. +*.* +* \ No newline at end of file diff --git a/oknardia/oknardia/settings.py b/oknardia/oknardia/settings.py index 9a128d4..f8d8ea0 100644 --- a/oknardia/oknardia/settings.py +++ b/oknardia/oknardia/settings.py @@ -11,6 +11,7 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/4.1/ref/settings/ """ +import os from pathlib import Path from oknardia.my_secret import * import socket @@ -18,6 +19,14 @@ import socket # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent +# Переключатель БД для DEV: по умолчанию используем SQLite. +# Чтобы вернуть MariaDB на DEV, установите OKNARDIA_USE_SQLITE_DEV=0 +USE_SQLITE_DEV = os.getenv("OKNARDIA_USE_SQLITE_DEV", "1").strip().lower() in { + "1", "true", "yes", "on" +} +PROJECT_ROOT = BASE_DIR.parent +SQLITE_DB_PATH = PROJECT_ROOT / 'database' / 'oknadria.sqlite3' + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ @@ -31,8 +40,8 @@ if socket.gethostname() in MY_HOST_DEV: DEBUG = TEMPLATE_DEBUG = True else: # Все остальные хосты (подразумевается продакшн) - DEBUG = TEMPLATE_DEBUG = True - # DEBUG = TEMPLATE_DEBUG = False + # DEBUG = TEMPLATE_DEBUG = True + DEBUG = TEMPLATE_DEBUG = False ALLOWED_HOSTS = MY_ALLOWED_HOSTS @@ -123,22 +132,33 @@ if socket.gethostname() in MY_HOST_DEV: # DEBUG: заменяем настр MEDIA_ROOT = MY_MEDIA_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_MEDIA_ROOT_DEV2 SITEMAP_ROOT = MY_SITEMAP_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_SITEMAP_ROOT_DEV2 # STATIC_ROOT = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2 - STATICFILES_DIRS = [ - MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2, - ] + dev_static_from_secret = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2 + # Если путь из секрета устарел, используем путь текущего репозитория. + dev_static_fallback = PROJECT_ROOT / 'public' / 'static' + dev_static_path = dev_static_from_secret if os.path.isdir(dev_static_from_secret) else str(dev_static_fallback) + STATICFILES_DIRS = [dev_static_path] # путь к каталогу static (в эту переменную использовать для указания пути где будут делаться кэш-блоки для шаблонов) - STATIC_BASE_PATH = MY_STATIC_BASE_PATH_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_BASE_PATH_DEV2 - DATABASES = { - 'default': { - 'ENGINE': "django.db.backends.mysql", - 'HOST': MY_DATABASE_HOST_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_DATABASE_HOST_DEV2, - 'PORT': MY_DATABASE_PORT_DEV, # Set to "" for default. Not used with sqlite3. - 'NAME': MY_DATABASE_NAME_DEV, # Not used with sqlite3. - 'USER': MY_DATABASE_USER_DEV, # Not used with sqlite3. - 'PASSWORD': MY_DATABASE_PASSWORD_DEV, # Not used with sqlite3. - # 'OPTIONS': { 'autocommit': True, } + dev_static_base_from_secret = MY_STATIC_BASE_PATH_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_BASE_PATH_DEV2 + STATIC_BASE_PATH = dev_static_base_from_secret if os.path.isdir(dev_static_base_from_secret) else str(dev_static_fallback) + if USE_SQLITE_DEV: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': SQLITE_DB_PATH, + } + } + else: + DATABASES = { + 'default': { + 'ENGINE': "django.db.backends.mysql", + 'HOST': MY_DATABASE_HOST_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_DATABASE_HOST_DEV2, + 'PORT': MY_DATABASE_PORT_DEV, # Set to "" for default. Not used with sqlite3. + 'NAME': MY_DATABASE_NAME_DEV, # Not used with sqlite3. + 'USER': MY_DATABASE_USER_DEV, # Not used with sqlite3. + 'PASSWORD': MY_DATABASE_PASSWORD_DEV, # Not used with sqlite3. + # 'OPTIONS': { 'autocommit': True, } + } } - } TOUCH_RELOAD = MY_TOUCH_RELOAD_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_TOUCH_RELOAD_DEV2 else: MEDIA_ROOT = MY_MEDIA_ROOT_PROD @@ -160,6 +180,17 @@ else: } TOUCH_RELOAD = MY_TOUCH_RELOAD_PROD +# Для локальной/тестовой разработки можно принудительно включить SQLite даже +# если hostname не попал в MY_HOST_DEV. На прод-хостах (MY_HOST_PROD) override +# не применяется. +if USE_SQLITE_DEV and socket.gethostname() not in MY_HOST_PROD: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': SQLITE_DB_PATH, + } + } + ######################################### # настройки для почтового сервера (они одинаковые для DEV и PROD) EMAIL_HOST = MY_EMAIL_HOST_DEV