调试Heroku上来自Mailgun的邮件500错误
我正在调试一个视图,这个视图是用来接收来自Mailgun的邮件,运行在Heroku上的Django应用里。
这个视图的代码直接来自Mailgun的文档,如果我手动调用这个网址,就能收到正常的响应。
@csrf_exempt
def askfriend_emailresponse(request):
from_email = "..."
to_email = "..."
if request.method == 'POST':
sender = request.POST.get('sender')
recipient = request.POST.get('recipient')
answer = request.POST.get('stripped-text', '')
try:
send_mail("inside post"+str(recipient[recipient.find("+")+1:recipient.find("@")]), answer, from_email, to_email)
except Exception, e:
raise e
return HttpResponse('OK')
而且,如果我通过一个外部工具(我用的是Poster)向这个网址发送一个POST请求,我也能收到200的响应(为了这个我需要加上@csrf_exempt
,不过现在这样也没问题)。
但是,从Mailgun的日志来看,转发消息时出现了500错误,而在Heroku上我也看到有一个请求导致了500错误:
2013-03-13T09:59:04+00:00 heroku[router]: at=info method=POST path=[url] host=[hostname].herokuapp.com fwd="198.61.253.112" dyno=web.1 queue=0 wait=0ms connect=1ms service=86ms status=500 bytes=102194
经过一天多的研究,我有几个问题:
1) 有什么想法可能出错了吗(如果能知道就太好了) - 这点同样重要
2) 我该如何正确测试这个呢?因为Mailgun的日志非常简短(500 - 就这样!),而Heroku也没有提供太多帮助……而且,每次都得先部署到Heroku显然是很慢的,所以我在想,这真的是“聪明”的开发方式吗……(其他的我当然是在本地测试,但对于通过Mailgun发送的外部邮件,我不知道怎么在本地测试)
谢谢!
1 个回答
我终于搞清楚问题出在哪里了:
1) 在Mailgun的教程里,你创建的路由后面没有加'/'(比如说:http://myhost.com/messages),但是APPEND_SLASH会导致POST重定向时出现问题。解决办法就是在重定向时简单地在后面加上'/'。
2) (以后在生产环境中可能会遇到的问题)- 要注意,在Django 1.5中引入了allowed_host这个值,它限制了哪些域名可以发送POST请求。我认为这个设置主要是在生产环境中使用(debug = false),但可能会导致后续的问题,所以一定要相应地设置好(我认为要允许mailgun.org作为主机)。
感谢所有尝试提供帮助的人!