Ver Fonte

Default loader now prints warning on missing celeryconfig.py instead of raising ImportError.

celeryd raises ImproperlyConfigured if the configuration is not set up.
Ask Solem há 15 anos atrás
pai
commit
79c4433b68
3 ficheiros alterados com 20 adições e 3 exclusões
  1. 3 0
      celery/bin/celeryd.py
  2. 1 0
      celery/loaders/base.py
  3. 16 3
      celery/loaders/default.py

+ 3 - 0
celery/bin/celeryd.py

@@ -223,6 +223,9 @@ class Worker(object):
         from celery.loaders import current_loader, load_settings
         from celery.loaders import current_loader, load_settings
         self.loader = current_loader()
         self.loader = current_loader()
         self.settings = load_settings()
         self.settings = load_settings()
+        if not self.loader.configured:
+            raise ImproperlyConfigured(
+                    "Celery needs to be configured to run celeryd.")
 
 
     def purge_messages(self):
     def purge_messages(self):
         discarded_count = discard_all()
         discarded_count = discard_all()

+ 1 - 0
celery/loaders/base.py

@@ -20,6 +20,7 @@ class BaseLoader(object):
     _conf_cache = None
     _conf_cache = None
     worker_initialized = False
     worker_initialized = False
     override_backends = {}
     override_backends = {}
+    configured = False
 
 
     def on_task_init(self, task_id, task):
     def on_task_init(self, task_id, task):
         """This method is called before a task is executed."""
         """This method is called before a task is executed."""

+ 16 - 3
celery/loaders/default.py

@@ -1,4 +1,5 @@
 import os
 import os
+import warnings
 from importlib import import_module
 from importlib import import_module
 
 
 from celery.loaders.base import BaseLoader
 from celery.loaders.base import BaseLoader
@@ -15,6 +16,10 @@ DEFAULT_SETTINGS = {
 }
 }
 
 
 
 
+class NotConfigured(UserWarning):
+    """Celery has not been configured, as no config module has been found."""
+
+
 def wanted_module_item(item):
 def wanted_module_item(item):
     return not item.startswith("_")
     return not item.startswith("_")
 
 
@@ -51,11 +56,19 @@ class Loader(BaseLoader):
         celery and Django so it can be used by regular Python."""
         celery and Django so it can be used by regular Python."""
         configname = os.environ.get("CELERY_CONFIG_MODULE",
         configname = os.environ.get("CELERY_CONFIG_MODULE",
                                     DEFAULT_CONFIG_MODULE)
                                     DEFAULT_CONFIG_MODULE)
-        celeryconfig = import_module(configname)
-        usercfg = dict((key, getattr(celeryconfig, key))
+        try:
+            celeryconfig = import_module(configname)
+        except ImportError, exc:
+            warnings.warn("No celeryconfig.py module found! Please make "
+                          "sure it exists and is available to Python.",
+                          NotConfigured)
+            return self.setup_settings({})
+        else:
+            usercfg = dict((key, getattr(celeryconfig, key))
                             for key in dir(celeryconfig)
                             for key in dir(celeryconfig)
                                 if wanted_module_item(key))
                                 if wanted_module_item(key))
-        return self.setup_settings(usercfg)
+            self.configured = True
+            return self.setup_settings(usercfg)
 
 
     def on_worker_init(self):
     def on_worker_init(self):
         """Imports modules at worker init so tasks can be registered
         """Imports modules at worker init so tasks can be registered