Mevcut bir Django uygulamasını 1.8'den 1.9'a (özellikle 1.9.4'e) yükseltme işlemindeyim. Bir üçüncü taraf e-posta sağlayıcısı (SendGrid) üzerinden yönetici hata e-postaları göndermek için özel bir günlük işleyici kullanıyorum.Django 1.9 Özel Günlük İşleyici Sınıfı: "İşleyici yapılandırılamadı" mail_admins ': Uygulamalar henüz yüklenmedi. "
runserver
komutu yürütülürken, aşağıdaki traceback oluşturulur:
Özel işleyici settings.LOGGING içinde: Burada Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/utils/log.py", line 71, in configure_logging
logging_config_func(logging_settings)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 789, in dictConfig
dictConfigClass(config).configure()
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 565, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'mail_admins': Apps aren't loaded yet.
özel günlüğü sınıf için ilgili kod parçacıkları şunlardır
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/utils/log.py", line 71, in configure_logging
logging_config_func(logging_settings)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 789, in dictConfig
dictConfigClass(config).configure()
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 565, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'mail_admins': Apps aren't loaded yet.
'mail_admins': {
'level': 'ERROR',
'class': 'coredev.utils.logging.SendgridAdminEmailHandler',
'filters': ['require_debug_false'],
'include_html': True,
}
coredev/utils/logging.py
from django.utils.log import AdminEmailHandler
from coredev.tasks import sendgrid_email
from settings import ADMINS
class SendgridAdminEmailHandler(AdminEmailHandler):
def send_mail(self, subject, message, *args, **kwargs):
for admin in ADMINS:
try:
if kwargs.get('html_message') is not None:
message_content = kwargs['html_message']
else:
message_content = message
sendgrid_email(admin[1], subject, message_content, message)
except:
pass
coredev/tasks.py (ilgili pasajı)
import sendgrid
from django.conf import settings
def sendgrid_email(to, subject, body, alt_body, from_email = settings.DEFAULT_FROM_EMAIL, template_id = settings.DEFAULT_TEMPLATE_ID):
sg = sendgrid.SendGridClient(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD, raise_errors = True)
message = sendgrid.Mail()
message.add_filter('templates', 'enable', '1')
message.add_filter('templates', 'template_id', template_id)
message.add_to(to)
message.set_from(from_email)
message.set_subject(subject)
message.set_html(body)
if alt_body:
message.set_text(alt_body)
sg.send(message)
Ben StackOverflow'daki ve Google'ın yanı sıra Django belgelerinde (https://docs.djangoproject.com/en/1.9/topics/logging/) inceledim, ama bulamadı oldum çözüm olarak henüz. Tüm uygulamaların "hazır" olmasına kadar modellerin içe aktarılmayacağını anlıyorum, ancak bu kodda herhangi bir model ithal ettiğime inanmıyorum, bu yüzden bu hatanın neden oluştuğunu bilmiyorum.
Kodumun hangi kısmı bu soruna neden oluyor? Özel günlüğe kaydetme işleyicimin Django 1.9'un AppRegistry ile uyumlu olmasını sağlamak için hangi adımları atmam gerekir; Özellikle, artık "Apps henüz yüklenmedi" hatası almam mı?
"Ayarlar," settings.py "dosyasını yüklemeye çalışırken ADMINS'i içe aktarıyor mu? 'Django.conf içe aktarma ayarlarından', sonra 'settings.ADMINS'den kullanılması daha iyi olacaktır. Dairesel bir içe aktarmayı önlemek için bu ayarların içe aktarılmasını ve 'sendedmail.tasks'ın sendgmail_tasil ifadesini 'send_mail' yönteminin içinden içe aktarmayı da deneyebilirsiniz. – Alasdair
Yanıt için teşekkürler @Alasdair. Her iki önerinizi de denedim, ancak maalesef hala aynı hatayı alıyorum. –