次のエラーが表示されます。
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