Skip to content
Snippets Groups Projects
production.py 4.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • Todd Dembrey's avatar
    Todd Dembrey committed
    import os
    
    import dj_database_url
    # import raven
    
    Fredrik Jonsson's avatar
    Fredrik Jonsson committed
    import django_heroku
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    
    from .base import *  # noqa
    
    # Do not set SECRET_KEY, Postgres or LDAP password or any other sensitive data here.
    # Instead, use environment variables or create a local.py file on the server.
    
    # Disable debug mode
    DEBUG = False
    
    
    # Cache everything for 10 minutes
    # This only applies to pages that do not have a more specific cache-control
    # setting. See urls.py
    CACHE_CONTROL_MAX_AGE = 600
    
    
    # Configuration from environment variables
    # Alternatively, you can set these in a local.py file on the server
    
    env = os.environ.copy()
    
    
    # Raven (sentry) configuration. See local settings for DSN
    
    if 'SENTRY_DSN' in env:
        INSTALLED_APPS += (
            'raven.contrib.django.raven_compat',
        )
    
        SENTRY_DSN = env['SENTRY_DSN']
    
    
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    # On Torchbox servers, many environment variables are prefixed with "CFG_"
    for key, value in os.environ.items():
        if key.startswith('CFG_'):
            env[key[4:]] = value
    
    
    # Basic configuration
    
    APP_NAME = env.get('APP_NAME', 'opentech')
    
    if env.get('SECURE_SSL_REDIRECT', 'true') == 'true':
        SECURE_SSL_REDIRECT = True
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    # enable HSTS only once the site is working properly on https with the actual live domain name
    # SECURE_HSTS_SECONDS = 31536000  # 1 year
    
    if 'SECRET_KEY' in env:
        SECRET_KEY = env['SECRET_KEY']
    
    if 'ALLOWED_HOSTS' in env:
        ALLOWED_HOSTS = env['ALLOWED_HOSTS'].split(',')
    
    if 'PRIMARY_HOST' in env:
        BASE_URL = 'http://%s/' % env['PRIMARY_HOST']
    
    if 'SERVER_EMAIL' in env:
        SERVER_EMAIL = env['SERVER_EMAIL']
        DEFAULT_FROM_EMAIL = env['SERVER_EMAIL']
    
    if 'EMAIL_HOST' in env:
        EMAIL_HOST = env['EMAIL_HOST']
    
    if 'EMAIL_SUBJECT_PREFIX' in env:
        EMAIL_SUBJECT_PREFIX = env['EMAIL_SUBJECT_PREFIX']
    
    if 'CACHE_PURGE_URL' in env:
    
        INSTALLED_APPS += ('wagtail.contrib.frontend_cache', )  # noqa
    
    Todd Dembrey's avatar
    Todd Dembrey committed
        WAGTAILFRONTENDCACHE = {
            'default': {
    
                'BACKEND': 'wagtail.contrib.frontend_cache.backends.HTTPBackend',
    
    Todd Dembrey's avatar
    Todd Dembrey committed
                'LOCATION': env['CACHE_PURGE_URL'],
            },
        }
    
    if 'STATIC_URL' in env:
        STATIC_URL = env['STATIC_URL']
    
    if 'STATIC_DIR' in env:
        STATIC_ROOT = env['STATIC_DIR']
    
    if 'MEDIA_URL' in env:
        MEDIA_URL = env['MEDIA_URL']
    
    if 'MEDIA_DIR' in env:
        MEDIA_ROOT = env['MEDIA_DIR']
    
    
    # Database
    
    if 'DATABASE_URL' in os.environ:
        DATABASES = {'default': dj_database_url.config()}
    
    else:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.postgresql_psycopg2',
                'NAME': env.get('PGDATABASE', APP_NAME),
                # User, host and port can be configured by the PGUSER, PGHOST and
                # PGPORT environment variables (these get picked up by libpq).
            }
        }
    
    
    # Logging
    
    if 'LOG_DIR' in env:
        # opentech.fund log
        LOGGING['handlers']['opentech_file'] = {
            'level': 'INFO',
            'class': 'cloghandler.ConcurrentRotatingFileHandler',
            'formatter': 'verbose',
            'filename': os.path.join(env['LOG_DIR'], 'opentech.log'),
            'maxBytes': 5242880,  # 5MB
            'backupCount': 5
        }
        LOGGING['loggers']['opentech']['handlers'].append('opentech_file')
    
        # Wagtail log
        LOGGING['handlers']['wagtail_file'] = {
            'level': 'INFO',
            'class': 'cloghandler.ConcurrentRotatingFileHandler',
            'formatter': 'verbose',
            'filename': os.path.join(env['LOG_DIR'], 'wagtail.log'),
            'maxBytes': 5242880,  # 5MB
            'backupCount': 5
        }
        LOGGING['loggers']['wagtail']['handlers'].append('wagtail_file')
    
        # Error log
        LOGGING['handlers']['errors_file'] = {
            'level': 'ERROR',
            'class': 'cloghandler.ConcurrentRotatingFileHandler',
            'formatter': 'verbose',
            'filename': os.path.join(env['LOG_DIR'], 'error.log'),
            'maxBytes': 5242880,  # 5MB
            'backupCount': 5
        }
        LOGGING['loggers']['django.request']['handlers'].append('errors_file')
        LOGGING['loggers']['django.security']['handlers'].append('errors_file')
    
    
    Fredrik Jonsson's avatar
    Fredrik Jonsson committed
    django_heroku.settings(locals())
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    
    try:
        from .local import *  # noqa
    except ImportError:
        pass