2013-03-01 57 views
7

Tôi đã tạo ra một ứng dụng django-cần tây như trong hướng dẫn tại địa chỉ:Django Cần tây ứng dụng - Không mô-đun tên lỗi cần tây

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

Tất cả mọi thứ hoạt động tốt khi tôi chạy nó mà không có tham số ứng dụng như trong:

$ python manage.py celery worker -l info 

nhưng tôi không thể bắt đầu điều đó chút nào với tham số ứng dụng, như trong:

$ python manage.py celery worker -A myapp -l info 

nơi myapp được tên trao cho các ứng dụng khi tôi tạo ra dự án với:

$ python manage.py startapp myapp 

Các lỗi mà tôi nhận được là:

ImportError: No module named celery 

Có ai biết tại sao điều này xảy ra và làm thế nào để giải quyết nó?

+3

Đối số '-A' là dành cho các ứng dụng cần tây, không dành cho các ứng dụng Django ... Chúng không được django-celery sử dụng vào lúc này. – asksol

+0

à, tôi không biết điều đó. Cảm ơn câu trả lời. Nhưng sau đó làm thế nào tôi có thể chạy điều này? – Clara

+0

Cần tây 3.1 sẽ hỗ trợ django từ đầu (nhưng không có tất cả các tính năng từ django-cần tây, e.g không có cơ sở dữ liệu kết quả phụ trợ và không có cơ sở dữ liệu định kỳ nhiệm vụ lập lịch, nhưng bạn vẫn có thể sử dụng djcelery trên đầu trang để có được điều đó) – asksol

Trả lời

14

Sửa Tháng 4 năm 2014:

Các Cần tây docs đã được cập nhật cho 3,1; các giải pháp dưới đây bây giờ đã lỗi thời, xem:

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


Theo mặc định, tìm kiếm cần tây cho một module có tên celery.py để tìm cấu hình của nó. Bạn có thể nhận cần tây để sử dụng một tên khác với celery.py bởi định it on the app argument - trong ví dụ này, chúng tôi sẽ tìm kiếm cần tây config trong settings.py:

python manage.py celery worker --app=myapp.settings 

Khi sử dụng django-celery bạn có thể sử dụng các cuộc gọi trên để bắt đầu cần tây, hoặc làm như tôi ban đầu đã làm và tạo ra một celery.py trong ứng dụng của tôi gói myapp:

from settings import celery 

My Django settings.py chứa cần tây cấu hình bình thường:

from celery import Celery 

celery = Celery(broker="amqp://guest:[email protected]:5672//") 

celery.conf.update(
    CELERY_DEFAULT_QUEUE = "myapp", 
    CELERY_DEFAULT_EXCHANGE = "myapp", 
    CELERY_DEFAULT_EXCHANGE_TYPE = "direct", 
    CELERY_DEFAULT_ROUTING_KEY = "myapp", 
) 

Sau đó chạy người lao động cần tây như thế này:

python manage.py celery worker --app=myapp 

Chỉ vì lợi ích của sự rõ ràng, đây là đầy đủ cấu trúc ứng dụng của tôi:

myproject/ 
    manage.py 
    myapp/ 
     __init__.py 
     settings.py 
     celery.py 
+2

Tôi đang bỏ phiếu +1 vì điều này đã giúp tôi nhận ra rằng cấu hình cần tây là một chút ma thuật đen và tôi phải cẩn thận. Nhưng bạn nên chỉnh sửa câu trả lời của bạn bởi vì nó không phù hợp. Tại sao bạn có một tệp celery.py nếu bạn đang thiết lập cần tây trong settings.py? Hay bạn muốn nói rằng bạn đang thiết lập nó trong celery.py? – Milimetric

+0

Chỉ cần cập nhật câu trả lời, dựa trên một sự hiểu biết tốt hơn bây giờ tôi có :) @Milimetric Tôi có một tập tin celery.py nhập khẩu settings.py, vì đó là những gì cần tây tìm kiếm theo mặc định. – mafrosis

+0

Nếu mã của bạn đang hoạt động và đó là mã nguồn mở, một liên kết sẽ tuyệt vời. Cảm ơn bạn đã chỉnh sửa. – Milimetric

0

Hãy chắc chắn bạn đang cố gắng để bắt đầu công nhân cần tây từ một thư mục có quyền truy cập vào mô-đun cần tây. Trong trường hợp của tôi, tôi đã cố gắng để bắt đầu công nhân từ thư mục ứng dụng chứ không phải là dự án.

Các vấn đề liên quan