mod: switch dev to sqlite and add static fallback paths

This commit is contained in:
2026-04-16 21:10:58 +03:00
parent 917bcb42c8
commit 3e67d6cf71
2 changed files with 50 additions and 16 deletions

3
database/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# Это папака для хранения базы данных SQLite, не должна быть в репозитории.
*.*
*

View File

@@ -11,6 +11,7 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/ https://docs.djangoproject.com/en/4.1/ref/settings/
""" """
import os
from pathlib import Path from pathlib import Path
from oknardia.my_secret import * from oknardia.my_secret import *
import socket import socket
@@ -18,6 +19,14 @@ import socket
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent 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 # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # 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 DEBUG = TEMPLATE_DEBUG = True
else: else:
# Все остальные хосты (подразумевается продакшн) # Все остальные хосты (подразумевается продакшн)
DEBUG = TEMPLATE_DEBUG = True # DEBUG = TEMPLATE_DEBUG = True
# DEBUG = TEMPLATE_DEBUG = False DEBUG = TEMPLATE_DEBUG = False
ALLOWED_HOSTS = MY_ALLOWED_HOSTS 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 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 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 # STATIC_ROOT = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2
STATICFILES_DIRS = [ dev_static_from_secret = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2
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 (в эту переменную использовать для указания пути где будут делаться кэш-блоки для шаблонов)
STATIC_BASE_PATH = MY_STATIC_BASE_PATH_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_BASE_PATH_DEV2 dev_static_base_from_secret = MY_STATIC_BASE_PATH_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_BASE_PATH_DEV2
DATABASES = { STATIC_BASE_PATH = dev_static_base_from_secret if os.path.isdir(dev_static_base_from_secret) else str(dev_static_fallback)
'default': { if USE_SQLITE_DEV:
'ENGINE': "django.db.backends.mysql", DATABASES = {
'HOST': MY_DATABASE_HOST_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_DATABASE_HOST_DEV2, 'default': {
'PORT': MY_DATABASE_PORT_DEV, # Set to "" for default. Not used with sqlite3. 'ENGINE': 'django.db.backends.sqlite3',
'NAME': MY_DATABASE_NAME_DEV, # Not used with sqlite3. 'NAME': SQLITE_DB_PATH,
'USER': MY_DATABASE_USER_DEV, # Not used with sqlite3. }
'PASSWORD': MY_DATABASE_PASSWORD_DEV, # Not used with sqlite3. }
# 'OPTIONS': { 'autocommit': True, } 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 TOUCH_RELOAD = MY_TOUCH_RELOAD_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_TOUCH_RELOAD_DEV2
else: else:
MEDIA_ROOT = MY_MEDIA_ROOT_PROD MEDIA_ROOT = MY_MEDIA_ROOT_PROD
@@ -160,6 +180,17 @@ else:
} }
TOUCH_RELOAD = MY_TOUCH_RELOAD_PROD 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) # настройки для почтового сервера (они одинаковые для DEV и PROD)
EMAIL_HOST = MY_EMAIL_HOST_DEV EMAIL_HOST = MY_EMAIL_HOST_DEV