9

次のエラーが表示されます。

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アプリではなく、セロリアプリであるプロジェクトがあります。したがって、プロジェクトwsgi.pyまたはアプリの開始時にmodels.py作成される一般的なファイルは作成していません。django-admin

私はここで指定されdjceleryたようなものを使用して定期的なタスクを作成できるようにするためにのみ使用したい実行時にcelery.schedulesを追加、変更、削除し、ここで定期的なタスクをCeleryに動的に追加/削除する方法(celerybeat)djcelery.schedules.DatabaseScheduler

ここに示されている問題の解決策 ( AppRegistryNotReady、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')
  • タスク.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()
  • セロリconfig.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

4

1 に答える 1