Merge pull request #425 from tourn/database-url

Add support for DATABASE_URL env var
This commit is contained in:
vabene1111
2021-05-18 16:30:54 +02:00
committed by GitHub

View File

@ -11,6 +11,9 @@ https://docs.djangoproject.com/en/2.0/ref/settings/
""" """
import ast import ast
import os import os
import random
import re
import string
from django.contrib import messages from django.contrib import messages
from django.contrib.staticfiles.storage import staticfiles_storage from django.contrib.staticfiles.storage import staticfiles_storage
@ -180,18 +183,45 @@ WSGI_APPLICATION = 'recipes.wsgi.application'
# Database # Database
# Load settings from env files # Load settings from env files
DATABASES = { if os.getenv('DATABASE_URL'):
'default': { match = re.match(
'ENGINE': os.getenv('DB_ENGINE') if os.getenv('DB_ENGINE') else 'django.db.backends.sqlite3', r'(?P<schema>\w+):\/\/(?P<user>[\w\d_-]+)(:(?P<password>[^@]+))?@(?P<host>[^:/]+)(:(?P<port>\d+))?(\/(?P<database>[\w\d_-]+))?',
'OPTIONS': ast.literal_eval(os.getenv('DB_OPTIONS')) if os.getenv('DB_OPTIONS') else {}, os.getenv('DATABASE_URL')
'HOST': os.getenv('POSTGRES_HOST'), )
'PORT': os.getenv('POSTGRES_PORT'), settings = match.groupdict()
'USER': os.getenv('POSTGRES_USER'), schema = settings['schema']
'PASSWORD': os.getenv('POSTGRES_PASSWORD'), if schema.startswith('postgres'):
'NAME': os.getenv('POSTGRES_DB') if os.getenv('POSTGRES_DB') else 'db.sqlite3', engine = 'django.db.backends.postgresql'
'CONN_MAX_AGE': 600, elif schema == 'sqlite':
engine = 'django.db.backends.sqlite3'
else:
raise Exception("Unsupported database schema: '%s'" % schema)
DATABASES = {
'default': {
'ENGINE': engine,
'OPTIONS': ast.literal_eval(os.getenv('DB_OPTIONS')) if os.getenv('DB_OPTIONS') else {},
'HOST': settings['host'],
'PORT': settings['port'],
'USER': settings['user'],
'PASSWORD': settings['password'],
'NAME': settings['database'],
'CONN_MAX_AGE': 600,
}
}
else:
DATABASES = {
'default': {
'ENGINE': os.getenv('DB_ENGINE') if os.getenv('DB_ENGINE') else 'django.db.backends.sqlite3',
'OPTIONS': ast.literal_eval(os.getenv('DB_OPTIONS')) if os.getenv('DB_OPTIONS') else {},
'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'),
'USER': os.getenv('POSTGRES_USER'),
'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
'NAME': os.getenv('POSTGRES_DB') if os.getenv('POSTGRES_DB') else 'db.sqlite3',
'CONN_MAX_AGE': 600,
}
} }
}
# Vue webpack settings # Vue webpack settings
VUE_DIR = os.path.join(BASE_DIR, 'vue') VUE_DIR = os.path.join(BASE_DIR, 'vue')