mail_admins 导致 Django/Apache2 连接被拒绝?

mail_admins causing connection refused for Django/Apache2?

我是 运行 Django,在 Ubuntu 后端有一个 Apache2 服务器。在加载我的站点时,出现 500 内部服务器错误。 Apache 日志如下所示:

AH00094: Command line: '/usr/sbin/apache2'    
mod_wsgi (pid=9568): Exception occurred processing WSGI script '/home/ubuntu/project/project/wsgi.py'.
Traceback (most recent call last):
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site- packages/django/core/handlers/wsgi.py", line 177, in __call__
    response = self.get_response(request)
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 216, in get_response
    'request': request
File "/usr/lib/python2.7/logging/__init__.py", line 1178, in error
    self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log
    self.handle(record)
File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle
    self.callHandlers(record)
File "/usr/lib/python2.7/logging/__init__.py", line 1321, in       callHandlers
    hdlr.handle(record)
File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle
    self.emit(record)
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/utils/log.py", line 117, in emit
    self.send_mail(subject, message, fail_silently=True, html_message=html_message)
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/utils/log.py", line 120, in send_mail
     mail.mail_admins(subject, message, *args, connection=self.connection(), **kwargs)
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/core/mail/__init__.py", line 97, in mail_admins
    mail.send(fail_silently=fail_silently)
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/core/mail/message.py", line 292, in send
    return self.get_connection(fail_silently).send_messages([self])
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
    new_conn_created = self.open()
File "/home/ubuntu/.virtualenvs/api/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 58, in open
    self.connection = connection_class(self.host, self.port, **connection_params)
File "/usr/lib/python2.7/smtplib.py", line 256, in __init__
    (code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 316, in connect
    self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 291, in _get_socket
    return socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py", line 571, in create_connection
    raise err
error: [Errno 111] Connection refused

在我看来,这是调用 mail_admins 方法时出现的错误。如果需要,我可以 post wsgi.py 或其他文件的内容。我的应用程序不涉及明确的电子邮件使用,所以我不确定这是怎么发生的。有任何想法吗?谢谢。

Django 有一个特殊的记录器,用于在发生 500 错误时向管理员发送电子邮件。查看 https://docs.djangoproject.com/en/1.9/topics/logging/#django.utils.log.AdminEmailHandler 了解更多信息。

似乎抛出了一个异常,django 试图通过向您发送电子邮件来传播它,但是无法发送电子邮件,所以您得到了另一个异常!真正异常的原因可能是在无法发送电子邮件导致的异常之前。但是,我建议修复您的电子邮件配置,以便 django 能够在发生 500 错误时向您发送这些电子邮件,这是一个很好的功能(也是像 Sentry 这样的完整异常跟踪器的第一步)。如果由于某种原因您无法从该服务器发送电子邮件,那么我建议至少将您的电子邮件后端 (https://docs.djangoproject.com/en/1.9/topics/email/#email-backends) 配置为控制台 (EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend') 或文件

EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location

以便邮件后端正常工作。