2014-01-22 91 views
0

我在启动芹菜时遇到了导入错误。这很令人困惑,因为这是几天前的工作,git显示没有任何变化。我认为芹菜对导入目录的启发式算法与我的拆分设置结构相冲突,也许我的路径/ env与调用工作时不同?我应该如何调整我的调用或环境来帮助芹菜加载所有下游进口?这是Celery 3.1.7和Django 1.6。芹菜导入错误

我invokation:

celery worker --app=proj.proj 

错误:

Traceback (most recent call last): 
    File "/home/ben/.virtualenvs/proj/bin/celery", line 8, in <module> 
    load_entry_point('celery==3.1.7', 'console_scripts', 'celery')() 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/__main__.py", line 30, in main 
    main() 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/celery.py", line 80, in main 
    cmd.execute_from_commandline(argv) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/celery.py", line 723, in execute_from_commandline 
    super(CeleryCommand, self).execute_from_commandline(argv))) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/base.py", line 303, in execute_from_commandline 
    return self.handle_argv(self.prog_name, argv[1:]) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/celery.py", line 715, in handle_argv 
    return self.execute(command, argv) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/celery.py", line 669, in execute 
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0]) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/worker.py", line 175, in run_from_argv 
    return self(*args, **options) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/base.py", line 266, in __call__ 
    ret = self.run(*args, **kwargs) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/bin/worker.py", line 208, in run 
    state_db=self.node_format(state_db, hostname), **kwargs 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/worker/__init__.py", line 95, in __init__ 
    self.app.loader.init_worker() 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/loaders/base.py", line 128, in init_worker 
    self.import_default_modules() 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/loaders/base.py", line 121, in import_default_modules 
    tuple(maybe_list(self.app.conf.CELERY_INCLUDE)) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/loaders/base.py", line 103, in import_task_module 
    return self.import_from_cwd(module) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/loaders/base.py", line 112, in import_from_cwd 
    package=package, 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/utils/imports.py", line 101, in import_from_cwd 
    return imp(module, package=package) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/celery/loaders/base.py", line 106, in import_module 
    return importlib.import_module(module, package=package) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/home/ben/Projects/proj/proj/proj/matches/management/tasks/valve_api_calls.py", line 9, in <module> 
    from matches.models import Match, LobbyType, GameMode,\ 
    File "/home/ben/Projects/proj/proj/proj/matches/models.py", line 1, in <module> 
    from django.db import models 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/django/db/__init__.py", line 11, in <module> 
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES: 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/home/ben/.virtualenvs/proj/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'proj.settings.local' (Is it on sys.path?): No module named settings.local 

我的项目是这样的:

proj <git root> 
└──proj <project root> 
    └── manage.py 
    └── proj <project app> 
       └── celery_app.py 
       └── settings 
        └── local.py 

我ENV瓦尔是:

DJANGO_SETTINGS_MODULE=proj.settings.local 
DJANGO_PROJECT_DIR=/home/ben/Projects/proj/proj/proj 

编辑:我使用的virtualenv,所以在启动时我的$ PATH看起来像

PATH=/home/ben/.virtualenvs/proj/bin: 
/usr/local/heroku/bin:/usr/lib/lightdm/lightdm: 
/usr/local/sbin:/usr/local/bin: 
/usr/sbin: 
/usr/bin: 
/sbin: 
/bin: 
/usr/games: 
/usr/local/games 
+0

为什么你运行'celery'指向一个应用程序?此外,请参阅您没有名为'proj.proj'的软件包。 – geekazoid

+0

Celery会执行一些应用程序自动发现,但可能需要帮助,具体取决于目录结构和文件名。在这种情况下,默认的“芹菜工”电话会错过我的应用程序(及其配置)。指定proj.proj让芹菜找到应用程序,但是堆栈跟踪显示任务中的导入链失去了自动发现这些模块的上下文。 – bwarren2

+0

你不能只为每个应用程序使用'tasks.py'吗? – geekazoid

回答

1

我的virtualenv受到了损坏。一个具有相同环境变量和已安装软件的新虚拟环境。

0

您芹菜的使用了错误的工作目录,因此它无法找到相对路径proj.settings.local

尝试修改您的设置DJANGO_PROJECT_DIR=/home/ben/Projects/proj/proj和看看它是否有效。

+0

尝试不同级别的/ proj /会产生相同的错误或发现问题(深度不够深的规范会漏掉应用程序)。 – bwarren2