3

ここでこのリストを調べていますが、うまくいきません:

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

だから私がしたことは:1)セロリモジュールをダウンロードし、それらを私のmanage.pyとwsgi.pyに追加しました:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import os, sys
from ConfigParser import RawConfigParser

config = RawConfigParser()
abspath = os.path.abspath(os.path.dirname(__file__))

config.read(abspath+'/subfolder/settings.ini')

homedir = config.get('paths', 'libspath')
projectspath = config.get('paths', 'projectspath')

path = [
    '/Django-1.4.5/', 
    '/South-0.7.6',
    '/python-openid-master',#07.05.2013 checkout from https://github.com/openid/python-openid
    '/mbi-django-rosetta-eca151e',
    '/phonenumbers-5.2b1',
    '/django-phonenumber-field-develop',
    '/django-openid-auth-0.5',
    '/celery-3.0.19',
    '/django-celery-3.0.17',
    '/kombu-2.5.11',
    '/billiard-2.7.3.28',
    '/anyjson-0.3.3',
    '/amqp-1.0.12'
    ]

for item in path:
    module = homedir+item
    if module not in sys.path:
        sys.path.append(module)

2)rabbitmqをインストールしました 3)settings.pyで設定を行います:

INSTALLED_APPS = (
    ---
    'djcelery',
)

そして最後に:

BROKER_URL = 'amqp://guest:guest@localhost:5672/'
import djcelery
djcelery.setup_loader()

4) python manage.py syncdb を実行しました

5) mod_wsgi を使用しているので、これも wsgi.py に追加しました (以前に示したコードに加えて)

import djcelery
djcelery.setup_loader()

6) コアアプリで tasks.py を作成しました:

import logging, subprocess
logger = logging.getLogger('debugger')

from django.conf import settings

from celery import task

@task
def runfunc(funcname, refno):
    x = 'nothing to see here'

7)私は実行します: python manage.py celery worker --loglevel=info そして、そのすべてが良いことを意味するたくさんのものを取得します:P.

しかし、タスクを実行するはずのdjangoビューに行くと、次のようになります:

cannot import name task
Request Method: GET
Request URL:    http://localhost/url/that/triggers/task/
Django Version: 1.4.5
Exception Type: ImportError
Exception Value:    
cannot import name task
Exception Location: /path/to/project/core/tasks.py in <module>, line 6

manage.py シェルに移動し、セロリのインポート タスクから入力すると、問題なく動作します。core.tasks から関数をインポートすると、まったく同じエラー メッセージが表示されます。

誰か説明してくれませんか?

アラン

4

2 に答える 2

1

ええ、最初のステップでどこでそれを手に入れましたか?? 追加のパッケージを実行するためにmanage.pyまたはファイルを変更する必要はありませんでした。wsgi.py「ダウンロードされたセロリモジュール」と言うと、そのすべてのsys.path変更コードがあります。pipそれはあなたがandを使用していないと私に信じさせますvirtualenv。これら 2 つのツールを使用すると、生活が大幅に楽になります。あなたのチームはあなたを永遠に愛してくれるでしょう。この問題を解決するために Python パッケージ管理が存在する場合は、過度に複雑にしないでください。パス マングリングが必要になることはめったにありません。

あなたが参照しているセロリの最初のステップは、実際に必要なすべてです。その特別なmod_wsgiメモを処理したようです。私の推測では、問題は最初のステップにあります。manage.py と wsgi.py にどのような変更を加えたとしてもです。他のすべてのステップは正常に見えます*。

私はあなたのコードのコピーを作成し、新しい virtualenv を作成し、それらのパッケージを pip インストールし、すべてのパス設定を削除します。django-admin.py startproject xxxプレーン バニラmanage.pywsgi.pyファイルがどのように見えるかを確認するために使用します。DEBUG=Trueまた、トラブルシューティングにも使用してください。それが機能し、問題が解決したらsettings.ini、を pip要件ファイルに置き換えます。

※南を使うので覚えておいてpython manage.py migrate djceleryください。(ステップ 4 では のみを使用しますsyncdb)。これを行うことでインポートエラーが修正されるとは思いませんが、全体像では必要です。

于 2013-07-01T23:12:15.340 に答える