2016-04-27 10 views
0

ためにはImportErrorを開始しません。私のアプリ名の1つはユーザーで、そのモデルは他のアプリからインポートされます。私はdjangoサーバーを実行すると、エラーなしで起動し、すべて正常に動作します。セロリの労働者は、私はブローカーとしてのRedisとのジャンゴとセロリを使用しようとしていますアプリ

しかし、私はコマンドを使用して、セロリワーカー「セロリ-Aプロジェクトワーカー-l INFO」を起動しようとすると、私は次のエラーを取得する:

Traceback (most recent call last): 
    File "/usr/local/bin/celery", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main 
    main() 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main 
    cmd.execute_from_commandline(argv) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 793, in execute_from_commandline 
    super(CeleryCommand, self).execute_from_commandline(argv))) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 311, in execute_from_commandline 
    return self.handle_argv(self.prog_name, argv[1:]) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 785, in handle_argv 
    return self.execute(command, argv) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 717, in execute 
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0]) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 179, in run_from_argv 
    return self(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 274, in __call__ 
    ret = self.run(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 212, in run 
    state_db=self.node_format(state_db, hostname), **kwargs 
    File "/usr/local/lib/python2.7/dist-packages/celery/worker/__init__.py", line 95, in __init__ 
    self.app.loader.init_worker() 
    File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 128, in init_worker 
    self.import_default_modules() 
    File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 116, in import_default_modules 
    signals.import_modules.send(sender=self.app) 
    File "/usr/local/lib/python2.7/dist-packages/celery/utils/dispatch/signal.py", line 166, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/usr/local/lib/python2.7/dist-packages/celery/fixups/django.py", line 73, in on_import_modules 
    self.worker_fixup.validate_models() 
    File "/usr/local/lib/python2.7/dist-packages/celery/fixups/django.py", line 158, in validate_models 
    django_setup() 
    File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/path_to_project/project/app1/models.py", line 2, in <module> 
    from app1.models import * 
    File "/path_to_project/project/project/models.py", line 9, in <module> 
    from user.models import * 
ImportError: No module named models 

ここで注意すべきことは、それは言うことですノーモジュールの名前モデルないuser.modelsという名前のモジュール。これは私が二重にチェックしており、プロジェクトディレクトリまたはAPP1ディレクトリのどちらかにはuser.pyはないが、他のファイルといくつかの競合があることを意味します。アプリ "user"の名前を "user2"に変更すると、ワーカーが起動します。また注目されるのは、セロリがいつか戻ってきてしまうという事実です。それ以来、コードは変更されていますが、アプリケーションは追加されていません。

私のプロジェクトは、(関連部分のみを示す)は、以下の構造

- project 
    - project 
    - celery.py 
    - models.py 
    - user 
    - models.py 
    - app1 
    - models.py 
    - tasks.py 

とcelery.pyを持って

from __future__ import absolute_import 

import os 
from celery import Celery 
from django.conf import settings 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

app = Celery('project') 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

セロリの設定は

BROKER_URL = 'redis://localhost:6379/0' 
CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 

おかげ

答えて

0

です問題名前空間の競合です。 python 2.xに含まれており、python 3内で除去しuser構成フックがあるように。 userに関するより詳しい情報

+0

名前を変更するが、回避策です。私はproject.user絶対インポートを試みたが、それは何のモジュール名project.user –

+0

を言わないあなたは、おそらくあなたのプロジェクトのための 'のpythonを3'使用しなければならないでしょうか、[この回答](http://stackoverflow.com/ような何かを行うことができますa/11158224)を使用して 'project.user'を使用できるようにします。あるいは単に 'user'の名前を大文字に変更しても、それを今解決するかもしれません。 –

関連する問題