mirror of https://github.com/zulip/zulip.git
wsgi.py: Fix broken error ouput for django.setup() call.
It's common for a broken settings.py file to result in Django not starting, thus never writing to `/var/log/zulip/errors.log`. Such behavior can be discouraging when the server 500s without a traceback to accompany it. To fix this, we simply catch any exceptions in django.setup(), if raised, and log the exception appropriately. Comments tweaked by tabbott. Closes: #7032.
This commit is contained in:
parent
b44d97688d
commit
3c1982ecab
|
@ -21,8 +21,23 @@ sys.path.append(BASE_DIR)
|
||||||
import scripts.lib.setup_path_on_import
|
import scripts.lib.setup_path_on_import
|
||||||
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
|
||||||
|
|
||||||
import django
|
import django
|
||||||
django.setup() # We need to call setup to load applications.
|
try:
|
||||||
|
django.setup()
|
||||||
|
except Exception as e:
|
||||||
|
# If /etc/zulip/settings.py contains invalid syntax, Django
|
||||||
|
# initialization will fail in django.setup(). In this case, our
|
||||||
|
# normal configuration to logs errors to /var/log/zulip/errors.log
|
||||||
|
# won't have been initialized. Since it's really valuable for the
|
||||||
|
# debugging process for a Zulip 500 error to always be "check
|
||||||
|
# /var/log/zulip/errors.log", we log to that file directly here.
|
||||||
|
import logging
|
||||||
|
logging.basicConfig(filename='/var/log/zulip/errors.log', level=logging.INFO,
|
||||||
|
format='%(asctime)s %(levelname)s %(name)s %(message)s')
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.exception(e)
|
||||||
|
raise
|
||||||
|
|
||||||
# Because import_module does not correctly handle safe circular imports we
|
# Because import_module does not correctly handle safe circular imports we
|
||||||
# need to import zerver.models first before the middleware tries to import it.
|
# need to import zerver.models first before the middleware tries to import it.
|
||||||
|
|
Loading…
Reference in New Issue