【问题标题】:mail_admins causing connection refused for Django/Apache2?mail_admins 导致 Django/Apache2 的连接被拒绝?
【发布时间】:2016-11-13 20:07:49
【问题描述】:

我在 Ubuntu 后端使用 Apache2 服务器运行 Django。在加载我的网站时,我收到 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 方法时,这是一个错误。如果需要,我可以发布wsgi.py 或其他文件的内容。我的应用程序不涉及明确的电子邮件使用,所以我不确定这是怎么发生的。有任何想法吗?谢谢。

【问题讨论】:

    标签: python django apache apache2


    【解决方案1】:

    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' # 把它改到合适的位置

    这样邮件后端才能正常工作。

    【讨论】:

    • 谢谢!问题是 settings.py 文件中的电子邮件地址无效。默认值为webmaster@localhost,但显然 ubuntu 将此标记为“可疑”地址,因此我不得不对其进行修改。 @Serafeim
    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多