Не работает, такая же ошибка с Apps aren't loaded yet.
-- project_blabla
|-- members
|-- models
|-- __init__.py
|-- subscription.py
|-- project.py **<-- class Session inside**
|-- ...
|-- tasks.py
|-- manage.py
Содержимое tasks.py
from __future__ import absolute_import
from django.conf import settings
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings.development')
app = Celery('project_blabla')
from members.models import Session
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(max_retries=1)
def session_delete(sids):
try:
for s in sids:
# just for test
a = Session.objects.filter(
pk=s,
deleted_at__isnull=False
).get()
print str(a)
except Exception, e:
return 'Cannot delete session(s): ' + str(e)
Вываливает
[2016-06-05 03:22:39,263: ERROR/Worker-1] Process Worker-1
Traceback (most recent call last):
File "D:\python27\lib\site-packages\billiard\process.py", line 292, in _bootstrap
self.run()
File "D:\python27\lib\site-packages\billiard\pool.py", line 292, in run
self.after_fork()
File "D:\python27\lib\site-packages\billiard\pool.py", line 395, in after_fork
self.initializer(*self.initargs)
File "D:\python27\lib\site-packages\celery\concurrency\prefork.py", line 58, in process_initializer
app.loader.init_worker()
File "D:\python27\lib\site-packages\celery\loaders\base.py", line 128, in init_worker
self.import_default_modules()
File "D:\python27\lib\site-packages\djcelery\loaders.py", line 140, in import_default_modules
super(DjangoLoader, self).import_default_modules()
File "D:\python27\lib\site-packages\celery\loaders\base.py", line 121, in import_default_modules
tuple(maybe_list(self.app.conf.CELERY_INCLUDE))
File "D:\python27\lib\site-packages\celery\loaders\base.py", line 103, in import_task_module
return self.import_from_cwd(module)
File "D:\python27\lib\site-packages\celery\loaders\base.py", line 112, in import_from_cwd
package=package,
File "D:\python27\lib\site-packages\celery\utils\imports.py", line 101, in import_from_cwd
return imp(module, package=package)
File "D:\python27\lib\site-packages\celery\loaders\base.py", line 106, in import_module
return importlib.import_module(module, package=package)
File "D:\python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
**File "e:\projects\project_blabla\repo\project_blabla\tasks.py", line 13, in <module>
from members.models import Session
File "e:\projects\project_blabla\repo\project_blabla\members\models\__init__.py", line 2, in <module>
from subscription import *
File "e:\projects\project_blabla\repo\project_blabla\members\models\subscription.py", line 10, in <module>
class SubscriptionPlan(models.Model):**
File "D:\python27\lib\site-packages\django\db\models\base.py", line 94, in __new__
app_config = apps.get_containing_app_config(module)
File "D:\python27\lib\site-packages\django\apps\registry.py", line 239, in get_containing_app_config
self.check_apps_ready()
File "D:\python27\lib\site-packages\django\apps\registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
AppRegistryNotReady: Apps aren't loaded yet.
Вероятнее всего я не до конца понимаю базовые вещи Джанго.
Кажется, что tasks полностью изолированы от окружения проекта и почему то не получается подцепиться.
Теоретически можно забить болт на это и организовать прямое хождение в базу минуя орм, с созданием соединения при каждом запуске таска (а таски в итоге будут ездить по расписанию раз в день, так что это с одной стороны приемлемый результат), но с другой стороны похоже на ересь и хочется сделать "как правильно". Может есть у кого идеи в чём может быть ошибка?