Django/djcelery 1.8.2 AppRegistryNotReady:翻译基础设施无法初始化

Posted

技术标签:

【中文标题】Django/djcelery 1.8.2 AppRegistryNotReady:翻译基础设施无法初始化【英文标题】:Django/djcelery 1.8.2 AppRegistryNotReady: Translation infrastructure cannot be initialized 【发布时间】:2015-08-27 19:09:22 【问题描述】:

我收到以下错误:

File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/utils/translation/trans_real.py", line 164, in _add_installed_apps_translations
"The translation infrastructure cannot be initialized before the "
django.core.exceptions.AppRegistryNotReady: The translation infrastructure cannot be initialized before the apps registry is ready. Check that you don't make non-lazy gettext calls at import time.

我有一个项目,它不是一个真正的 django 应用程序,而是一个 celery 应用程序。因此,我没有在项目或应用程序启动时创建wsgi.pymodels.pydjango-admin 创建的任何典型文件。

我只想使用djcelery 能够使用djcelery.schedules.DatabaseScheduler 创建定期任务,就像这里指定的Add, modify, remove celery.schedules at run time 和这里How to dynamically add / remove periodic tasks to Celery (celerybeat) 一样

此处给出的问题解决方案 (AppRegistryNotReady, translation bug when deploying with uWSGI) 需要我对 vassal.ini 文件进行更改。我的实现中没有 vassal.ini 文件。

我将简要介绍一下我的项目 -

proj
  apps.py
  tasks.py
  celeryconfig.py
  runproj.py
apps.py
    from celery import Celery
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryconfig')
    myapp = Celery('myapp')
    myapp.config_from_object('celeryconfig')
    if __name__ == '__main__'
        myapp.worker_main('-B', '-S', 'djcelery.schedules.DatabaseScheduler')
tasks.py
    from apps import myapp
    @myapp.task(name='msgprinter')
    def msg_printer(msg):
        print msg
runproj.py
    from djcelery.models import PeriodicTask, IntervalSchedule
    intSch = IntervalSchedule(period='seconds', every=30)
    periodic_task = PeriodicTask(
      name = 'msg_printer_schedule',
      task = 'proj.tasks.msg_printer',
      interval = intSch,
      args=json.dump(['such wow']),
     )
    periodic_task.save()
celeryconfig.py
    CELERY_ACCEPT_CONTENT = ['pickle', 'json']
    BROKER_URL = 'amqp://guest@localhost'
    CELERY_IMPORTS = ('proj.tasks')
    CELERY_QUEUES = [Queue('default', Exchange('default', type='direct'), routing_key='default')]

    #DJANGO SETTINGS
    INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'djcelery',
    'mypp')

    DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join('/home', 'test.db'),
        
    

在运行工作程序之前,我使用django-admin migrate 命令创建了所需的表。我可以看到/home/test.db 数据库中的表。

首先我运行工人 - $python apps.py 然后我将一个计划保存到数据库中,以便由 celerybeat 守护进程重复执行 - $python runproj.py

【问题讨论】:

看看这个:***.com/a/24793445/2036767 Django: AppRegistryNotReady()的可能重复 【参考方案1】:

正如 django 文档中所说,如果您将 django 应用程序作为独立应用程序运行,则应确保您自己完成 initialization process 的所有步骤:

设置()

这个函数是自动调用的:

当通过 Django 的 WSGI 支持运行 HTTP 服务器时。

调用管理命令时。

它必须在其他情况下显式调用,例如在纯 Python 脚本中。

在您的情况下,它就像调用 django.setup() 一样简单:

from celery import Celery
import django
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryconfig')
myapp = Celery('myapp')
myapp.config_from_object('celeryconfig')

if __name__ == '__main__'
    django.setup()
    myapp.worker_main('-B', '-S', 'djcelery.schedules.DatabaseScheduler')

此外,您的设置模块 (celeryconfig.py) 应被视为 Python 代码,因此您必须导入所有使用的对象(QueueExchangekombuos 模块) .

并包含 django 所需的设置。在您的celeryconfig.py 文件中添加SECRET_KEY

from kombu import Exchange, Queue
import os


CELERY_ACCEPT_CONTENT = ['pickle', 'json']
BROKER_URL = 'amqp://guest@localhost'
CELERY_IMPORTS = ('proj.tasks')
CELERY_QUEUES = [Queue('default', Exchange('default', type='direct'), routing_key='default')]

#DJANGO SETTINGS
SECRET_KEY = "YOUR_TOP_SECRET_KEY"

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djcelery',
'mypp')

DATABASES = 
'default': 
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join('/home', 'test.db'),
    

【讨论】:

以上是关于Django/djcelery 1.8.2 AppRegistryNotReady:翻译基础设施无法初始化的主要内容,如果未能解决你的问题,请参考以下文章

django

aab文件和apk之间的转化

记录一下本应用《任您记)APP项目中点击底部导航栏四个按钮,则界面颜色跟着变化及图标字放大效果

起步:Proteus 8 仿真 Arduino 1.8.2

log

Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)二