Sorry if this is not an appropriate place for a django/djcelery related error.
I am getting the following error:
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.
I have a project which is not really a django app but a celery app. Therefore, I have not created a wsgi.py
or models.py
or any of the typical files created by django-admin
when a project or app is started.
I only want to use djcelery
to be able to create periodic tasks using the djcelery.schedules.DatabaseScheduler
like specified here Add, modify, remove celery.schedules at run time and here How to dynamically add / remove periodic tasks to Celery (celerybeat)
The solution to the problem as given here (AppRegistryNotReady, translation bug when deploying with uWSGI) requires me to make changes to vassal.ini file. There is no vassal.ini file in my implementation.
I will briefly describe my proj -
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('--loglevel=DEBUG', '-B', '-S', 'djcelery.schedules.DatabaseScheduler')
- tasks.py
from apps import myapp
@myapp.task(name='proj.msg_printer')
def msg_printer(msg):
print msg
- runproj.py
from djcelery.models import PeriodicTask, IntervalSchedule
intSch = IntervalSchedule(period='seconds', every=30)
periodic_task = PeriodicTask(
name = '30-sec-msg-printer',
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',)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join('/home', 'test.db'),
}
}
Before I run the workers I created the required tables using the django-admin migrate
command. I can see the relevant tables to store interval schedules and periodic tasks in the /home/test.db
database.
First I run the workers - $python apps.py
Then I save a schedule to the database to be executed repeatedly by celerybeat daemon - $python runproj.py
Any thoughts? Thank you.