繁体   English   中英

Django wsgi.py设置导致内部服务器错误而不记录日志的电子邮件环境变量

[英]Django wsgi.py Setting Email Environment Variables Causing Internal Server Error No Logging

我正在测试系统上的Django saleor应用中设置测试电子邮件帐户。

测试系统正在使用apache2 / mod_wsgi在virtualenv中运行Django

>>> django.VERSION
(1, 8, 7, 'final', 0)

我的settings.py文件的电子邮件部分包含以下内容:

EMAIL_USE_TLS = True
EMAIL_HOST = os.environ.get("EMAIL_HOST")
EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD")
EMAIL_HOST_PORT = os.environ.get("EMAIL_HOST_PORT")
DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL')

在我的本地系统上,我设置了以下环境变量。 电子邮件:

EMAIL_HOST="smtp.gmail.com"
EMAIL_HOST_USER="name@gmail.com"
EMAIL_HOST_PASSWORD="doublesecret"
EMAIL_HOST_PORT=587
DEFAULT_FROM_EMAIL="name@gmail.com"

我已经在我的本地系统上使用gmail的smtp测试了它,并且工作正常。

我在运行apache的远程主机上的wsgi.py是:

import os
import sys
import site

os.environ.setdefault("EMAIL_HOST", "smtp.gmail.com")
os.environ.setdefault("EMAIL_HOST_USER", "name@gmail.com")
os.environ.setdefault("EMAIL_HOST_PASSWORD", "doublesecret")
os.environ.setdefault("EMAIL_HOST_PORT", 587)
os.environ.setdefault("DEFAULT_FROM_EMAIL", "name@gmail.com")

site.addsitedir("/home/user/project/venv/lib/python2.7/site-packages")
os.environ.setdefault("SECRET_KEY", "aaaaaaaaaaaaaaaaaaaaaaaaaayyyyylmao")
os.environ.setdefault("MYSQL_DB_URL", "mysql://user:passwordo@myhost-dev.xxxxxxxxx.us-east-1.rds.amazonaws.com:3306/saleor")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "saleor.settings")
project = "/home/user/project/saleor"
workspace = os.path.dirname(project)
sys.path.append(workspace)

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

尝试发送request_email_confirmation时,我收到内部服务器错误消息。

我确定我缺少关于环境变量的声明顺序或声明位置的信息。 出于明显的原因,我不想将变量硬编码到我的settings.py中。

线索为什么会这样? 更重要的是,当我不太愿意正确记录日志时,有关如何正确解决apache / mod_wsgi / django的线索?

这是我要首先调试的工作:

os.environ.get("EMAIL_HOST")类的设置更改为os.environ.get("EMAIL_HOST", 'proper settings')然后查看错误是否是您的django实例无法获取env值。

其次,取决于您如何设置apache和wsgi,还假设您尚未设置LOGGING设置,则错误日志将大部分最终存储在/var/log/apache/

我显然是个白痴。

我在wsgi.py中添加了以下内容:

sys.stdout = sys.stderr

并设置

LogLevel info

在/etc/apache2/apache2.conf中,它将有用的错误消息放入/var/log/apache2/error.log

其中显示:

TypeError: must be string, not int

是的,我对EMAIL_HOST_PORT的值加引号不屑一顾!

os.environ.setdefault("EMAIL_HOST_PORT", "587")

是正确的。 我现在可以成功发送电子邮件了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM