Explorar o código

Fixed a bug with spawned worker processes not using the django settings.py even though celery was launched through manage.py.

unknown %!s(int64=16) %!d(string=hai) anos
pai
achega
0c4242409a
Modificáronse 1 ficheiros con 12 adicións e 0 borrados
  1. 12 0
      celery/loaders/__init__.py

+ 12 - 0
celery/loaders/__init__.py

@@ -1,6 +1,7 @@
 from celery.loaders.djangoapp import Loader as DjangoLoader
 from celery.loaders.djangoapp import Loader as DjangoLoader
 from celery.loaders.default import Loader as DefaultLoader
 from celery.loaders.default import Loader as DefaultLoader
 from django.conf import settings
 from django.conf import settings
+from django.core.management import setup_environ
 
 
 """
 """
 .. class:: Loader
 .. class:: Loader
@@ -11,6 +12,17 @@ The current loader class.
 Loader = DefaultLoader
 Loader = DefaultLoader
 if settings.configured:
 if settings.configured:
     Loader = DjangoLoader
     Loader = DjangoLoader
+else:
+    # We might still be running celery with django, because worker processes
+    # spawned with celery running through manage.py, will not have had their
+    # django environment set up
+    try:
+        # If we can import 'settings', assume we're running celery with django
+        import settings as project_settings
+        setup_environ(project_settings)
+        Loader = DjangoLoader
+    except ImportError:
+        pass
 
 
 """
 """
 .. data:: current_loader
 .. data:: current_loader