【问题标题】:What is the best way to send Django 500 error email on Google App Engine?在 Google App Engine 上发送 Django 500 错误电子邮件的最佳方式是什么?
【发布时间】:2012-04-06 13:07:49
【问题描述】:

我正在使用最新的 Google App Engine (GAE) 环境提供的最新工具,即 Django 1.3 via

libraries:
- name: django
  version: "1.3"

按照此处 GAE 文档的说明。

尽管如此,尽管我发现很多链接讨论如何使用强大的 GAE-Django 组合发送祝福的 HTTP500 电子邮件,但所有这些链接都已过时,因为它们要么太旧要么使用“附加”工具,如 AppEngineHelper 或 django -nonrel。

回到我的问题:我设置了我的 settings.py 以遵循 Django 文档说明 here,因为在 GAE opening sockets is restricted 上,我最终得到了这个回溯:

ERROR    2012-03-21 23:11:15,855 base.py:209] Internal Server Error: /contact/
Traceback (most recent call last):
  File "/home/josvic/dev-tools/google_appengine/lib/django_1_3/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/home/josvic/dev/qdsa/gae/apputil/decorators.py", line 14, in wrapper
    output = func(request, *args, **kw)
  File "/home/josvic/dev/qdsa/gae/qdcom/views/contact.py", line 26, in __call__
    return self.f(request, *args, **kwargs)
  File "/home/josvic/dev/qdsa/gae/qdcom/views/contact.py", line 59, in contact_page
    msg.send()
  File "/home/josvic/dev-tools/google_appengine/lib/django_1_3/django/core/mail/message.py", line 251, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/josvic/dev-tools/google_appengine/lib/django_1_3/django/core/mail/backends/smtp.py", line 79, in send_messages
    new_conn_created = self.open()
  File "/home/josvic/dev-tools/google_appengine/lib/django_1_3/django/core/mail/backends/smtp.py", line 42, in open
    local_hostname=DNS_NAME.get_fqdn())
  File "/home/josvic/dev-tools/google_appengine/lib/django_1_3/django/core/mail/utils.py", line 16, in get_fqdn
    self._fqdn = socket.getfqdn()
AttributeError: 'module' object has no attribute 'getfqdn'

这就是问题所在。我们有规避这种情况的标准方法吗?

我唯一能想到的绕过这个问题的方法是使用一个使用 GAE 标准邮件 API 的自定义 500error 处理程序。

【问题讨论】:

  • django-nonrel 是如何“腐烂”的?这是一个完全维护的项目,拥有所有者和贡献者。什么意思?
  • @DanielRoseman 嗨,丹尼尔。感谢您的评论。我用“附加”代替了“腐烂”。你说得对。我的意思是“衰减”,因为使用 Python2.7 环境和 CloudSQL,您根本不需要 django-nonrel 来运行传统的 Django 应用程序,也就是说,我的意思更多的是“衰减”用例而不是衰减工具,因为现在您可以在 GAE 上有一个关系数据库后端。 django-nonrel 旨在与 noSQL 数据库一起使用,而不仅仅是与 GAE 一起使用;你是对的。

标签: django google-app-engine


【解决方案1】:

我能想到的两个选项是:

  1. 使用 GAE 标准邮件 API 的自定义日志记录处理程序,与 500 错误处理程序没有太大区别,但您不必重写视图:https://docs.djangoproject.com/en/dev/topics/logging/

  2. 替换电子邮件后端。我不是 100% 肯定这有效,但我怀疑它会。 Django-nonrel 项目中已经有一个(顺便说一句,它仍在维护中) https://github.com/django-nonrel/djangoappengine 查看mail.py

【讨论】:

  • 我选择了选项 1!选项 2 没有成功,因为我最终解决了原始问题。我用特定的 GAE 东西做了一个应用程序,所以很容易回退到默认的 Django 处理程序,以防我决定切换到其他提供程序而不是 AppEngine。
  • 这是选项 2 的另一个电子邮件后端,据报道这个有效。 andialbrecht.de/blog/2009/11/04/…
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2012-04-10
  • 2010-10-27
  • 2020-09-28
  • 2015-08-04
  • 1970-01-01
  • 2010-11-26
  • 2012-11-14
相关资源
最近更新 更多