2016-08-24 2 views
1

Я пытаюсь исправить ошибку, которую я вижу в приложении django, где он не отправляет почту. Обратите внимание, что приложение отлично работает, это только функция почты, которая терпит неудачу. Я попытался собрать журналы ошибок, но я не могу придумать никаких ошибок, связанных с отправкой почты. Итак, я сделал пример, чтобы попытаться заставить ошибки. Вот пример:Как установить переменную env DJANGO_SETTINGS_MODULE?

from django.core.mail import send_mail 

send_mail('hi', 'hi', '[email protected]', ['[email protected]'], fail_silently=False) 

Когда я запускаю приведенный выше код, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "dmail.py", line 14, in <module> 
    send_mail('hi', 'hi', '[email protected]', ['[email protected]'], fail_silently=False) 
    File "/data/servers/calendar_1/lib/python2.7/site-packages/django/core/mail/__init__.py", line 59, in send_mail 
    fail_silently=fail_silently) 
    File "/data/servers/calendar_1/lib/python2.7/site-packages/django/core/mail/__init__.py", line 29, in get_connection 
    path = backend or settings.EMAIL_BACKEND 
    File "/data/servers/calendar_1/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner 
    self._setup() 
    File "/data/servers/calendar_1/lib/python2.7/site-packages/django/conf/__init__.py", line 39, in _setup 
    raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) 
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined. 

мне удалось исправить мой тестовый пример, изменив код для этого:

from django.core.mail import send_mail 

from django.conf import settings 
settings.configure(TEMPLATE_DIRS=('/path_to_project',), DEBUG=False, TEMPLATE_DEBUG=False) 

send_mail('hi', 'hi', '[email protected]', ['[email protected]'], fail_silently=False) 

Однако, когда я пытаюсь добавить эти параметры в send_mail.py, я по-прежнему не получаю почту от моего фактического приложения. Может ли кто-нибудь объяснить мне, ясно, как я настраиваю DJANGO_SETTINGS_MODULE, чтобы как мой пример, так и мое приложение могли его увидеть? В противном случае, может кто-нибудь сказать мне, как настроить значащую запись в django, чтобы я действительно видел ошибки, связанные с почтой в журналах? Любые советы или рекомендации будут очень признательны.

ответ

0

Вы на Mac или Linux? Затем просто export DJANGO_SETTINGS_MODULE="project_name.settings.your_settings_file" Убедитесь, что если ваш файл настроек находится в папке, есть файл __init__.py.

В окнах я считаю, что эквивалент SET DJANGO_SETTINGS_MODULE="project_name.settings.your_settings_file, но я мог ошибаться.

Для протоколирования Джанго см https://docs.djangoproject.com/en/1.10/topics/logging/

+0

Я на CentOS/Linux. Мое приложение называется oats, а файл настроек называется settings.py. Итак ... Я пытался: export DJANGO_SETTINGS_MODULE = "oats.settings" Но это не имело никакого эффекта. Приложение-тест не подбирает его. – Matthew

+0

В вашем первом блоке кода вы запускаете его из интерпретатора Python или оболочки django? Если оболочка, то убедитесь, что у вас есть TEMPLATE_DIRS = ('/ path_to_project',), DEBUG = False, TEMPLATE_DEBUG = False в вашем файле настроек, затем вызовите оболочку с параметром --settings = oats.settings. Используйте тот же параметр --settings, когда вы запустите свой сервер. – perfect5th

+0

Я использую интерпретатор, а не оболочку. Я пытался настроить протоколирование и протоколирование, но ничего не связано с почтой. Очень расстраивает. – Matthew

2

Не устанавливайте его снаружи приложения. Сделайте запись для переменной DJANGO_SETTINGS_MODULE в файле wsgi. Каждый раз, когда ваш сервер будет запущен, эта переменная будет установлена ​​автоматически.

Например:

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = '<project_name>.settings' 
+0

Конечно, звучит здорово. У вас есть пример? (Для записи) – Matthew

+0

Обновленный ответ –

+0

Я проверил файл WSGI и у него уже есть: os.environ.setdefault («DJANGO_SETTINGS_MODULE», «oats.settings») Постараюсь без SetDefault. – Matthew

Смежные вопросы