简体   繁体   中英

Server Error 500 when DEBUG=False

I am trying to deploy a web application to Heroku using Django. I can run the app locally just fine, but when I try to load it up live with DEBUG = False , I get a server 500 error. If I change the settings to DEBUG = True , it works. I would appreciate any help.

EDIT: I found a thread that helped me get an email version of the error, which is Missing staticfiles manifest entry for 'home/css/bootswatch.css' . So now my concern is that the static files are not configured properly but I don't know how to fix them. I am using this default django/heroku template with collectstatic disabled - I had to do this in order to even get the app to deploy. Could this be the issue? I can't remember the exact command I had to run, but basically heroku told me it could not deploy the app until I disabled collectstatic .

*NEW EDIT: Thanks to this thread , I realized I had to remove my disabled collectstatic config var, then try to build again. Didn't work. Error led me to realize that the default static file that comes with the starter template has to be INSIDE the settings MODULE. Did that, pushed - still didn't work. The traceback showed me that there was something wrong with my font-awesome css file. Deleted the file, added a CDN instead, pushed, and boom. Site works. I hope this is helpful to someone else in the future.

Error log

2017-10-08T19:33:03.000000+00:00 app[api]: Build started by user me@email.com
2017-10-08T19:33:19.148973+00:00 heroku[web.1]: Restarting
2017-10-08T19:33:19.149620+00:00 heroku[web.1]: State changed from up to starting
2017-10-08T19:33:19.717815+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2017-10-08T19:33:19.732436+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [4] [INFO] Handling signal: term
2017-10-08T19:33:19.732487+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [8] [INFO] Worker exiting (pid: 8)
2017-10-08T19:33:19.732716+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [9] [INFO] Worker exiting (pid: 9)
2017-10-08T19:33:19.833095+00:00 app[web.1]: [2017-10-08 19:33:19 +0000] [4] [INFO] Shutting down: Master
2017-10-08T19:33:20.012423+00:00 heroku[web.1]: Process exited with status 0
2017-10-08T19:33:18.676112+00:00 app[api]: Release v30 created by user me@email.com
2017-10-08T19:33:18.676112+00:00 app[api]: Deploy 8f625678 by user me@email.com
2017-10-08T19:33:03.000000+00:00 app[api]: Build succeeded
2017-10-08T19:33:29.936137+00:00 heroku[web.1]: Starting process with command `gunicorn portfolio.wsgi`
2017-10-08T19:33:32.419548+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Starting gunicorn 19.6.0
2017-10-08T19:33:32.420072+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Listening at: http://0.0.0.0:23534 (4)
2017-10-08T19:33:32.420207+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [4] [INFO] Using worker: sync
2017-10-08T19:33:32.424142+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [8] [INFO] Booting worker with pid: 8
2017-10-08T19:33:32.523409+00:00 app[web.1]: [2017-10-08 19:33:32 +0000] [9] [INFO] Booting worker with pid: 9
2017-10-08T19:33:33.592588+00:00 heroku[web.1]: State changed from starting to up
2017-10-08T19:33:33.991800+00:00 heroku[router]: at=info method=GET path="/" host=myproject.herokuapp.com request_id=89d87c81-0ab1-4b
2e-8705-43ef55710082 fwd="my.public.ip.address" dyno=web.1 connect=0ms service=225ms status=500 bytes=234 protocol=https
2017-10-08T19:33:36.569500+00:00 heroku[router]: at=info method=GET path="/" host=myproject.herokuapp.com request_id=cb8ea686-89ba-44
0f-8e66-0c3258c2de92 fwd="my.public.ip.address" dyno=web.1 connect=0ms service=42ms status=500 bytes=234 protocol=https

Folder structure:

  • project
    • app
    • app
    • project
      • settings
        • __ init __.py
        • base_settings.py
        • local_settings.py
        • production_settings.py
      • manage.py

__ init __.py

from .base_settings import *
from .production_settings import *

try:
    from .local_settings import *
except:
    pass

base_settings.py

import os, dj_database_url

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

DEBUG = ""


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    # Disable Django's own staticfiles handling in favour of WhiteNoise, for
    # greater consistency between gunicorn and `./manage.py runserver`. See:
    # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
    'app ',
    'app',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'project.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'debug': DEBUG,
        },
    },
]

WSGI_APPLICATION = 'project.wsgi.application'


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

# Change 'default' database configuration with $DATABASE_URL.
DATABASES['default'].update(dj_database_url.config(conn_max_age=500))

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['myproject.herokuapp.com', 'localhost']

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, 'static'),
]

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

local_settings.py

from .base_settings import *

SECRET_KEY = 'mysecretkey'

DEBUG = True

production_settings.py

from .base_settings import *

SECRET_KEY = os.environ.get('SECRET_KEY')

DEBUG = False

The only problem I know of that kicks in when DEBUG = False is the ALLOWED_HOSTS setting. With DEBUG off Django will check your host name against the list and will reject the request if the host is not on the allowed list.

It usually results in a 400 but can give a 500 if further problems are encountered: Django allowed hosts with port number

Thanks to this thread , I realized I had to remove my disabled collectstatic config var, then try to build again. Didn't work. Error led me to realize that the default static file that comes with the starter template has to be INSIDE the settings MODULE. Did that, pushed - still didn't work. The traceback showed me that there was something wrong with my font-awesome css file. Deleted the file, added a CDN instead, pushed, and boom. Site works. I hope this is helpful to someone else in the future.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM