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
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
|
||||
|
||||
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
|
||||
# need to import zerver.models first before the middleware tries to import it.
|
||||
|
|
Loading…
Reference in New Issue