2011-12-08 22 views
11

Tôi cố gắng để sử dụng django-cần tây trong dự án của tôidjango-cần tây: Không có kết quả phụ trợ cấu hình

Trong settings.py Tôi có

CELERY_RESULT_BACKEND = "amqp" 

Các máy chủ bắt đầu tốt với

python manage.py celeryd --setting=settings 

Nhưng nếu tôi muốn truy cập kết quả từ tác vụ bị trì hoãn, tôi nhận được lỗi sau:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready 
    return self.status in self.backend.READY_STATES 
    File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status 
    return self.state 
    File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state 
    return self.backend.get_status(self.task_id) 
    File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is 
_disabled 
    raise NotImplementedError("No result backend configured. " 
NotImplementedError: No result backend configured. Please see the documentation 
for more information. 

Điều đó rất lạ vì khi tôi chỉ cần chạy cần tây (với cùng một thiết lập cần tây), nó hoạt động tốt. Đã có ai gặp vấn đề này trước đây chưa?

Cảm ơn trước!

Trả lời

0

Một số cách giao diện điều khiển phải có môi trường django được thiết lập để nhận cài đặt. Ví dụ, trong PyCharm bạn có thể chạy giao diện điều khiển django, trong đó mọi thứ hoạt động như mong đợi.

4

tôi đã cùng một vấn đề trong khi nhận được kết quả sau từ nhiệm vụ cần tây mặc dù nhiệm vụ cần tây đã được thực thi (nhật ký console). Những gì tôi thấy là, tôi đã có cùng một thiết lập CELERY_RESULT_BACKEND = "redis" trong django settings.py nhưng tôi cũng đã khởi tạo cần tây trong task.py

celery = Celery('tasks', broker='redis://localhost') - tôi giả định ghi đè thuộc tính settings.py và do đó nó không định cấu hình chương trình phụ trợ máy chủ cho trường hợp cần tây của tôi được sử dụng để lưu trữ các kết quả.

tôi đã xóa mục này và để cho django có được cần tây lấy các thuộc tính từ settings.py và mã mẫu làm việc cho tôi.

1

Đối với những người đang tìm kiếm một giải pháp tuyệt vọng như tôi.

Đặt dòng này vào cuối của settings.py kịch bản:

djcelery.setup_loader() 

Hình như django-cần tây sẽ không xem xét nó là thiết lập riêng mà không có lệnh nghiêm ngặt.

0

Xem AMQP BACKEND SETTINGS cho sự hiểu biết tốt hơn

Note The AMQP backend requires RabbitMQ 1.1.0 or higher to automatically expire results. If you are running an older version of RabbitMQ you should disable result expiration like this: CELERY_TASK_RESULT_EXPIRES = None

Hãy thử thêm dòng dưới đây để settings.py của bạn:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

0

Trong trường hợp của tôi, vấn đề đã được rằng tôi đã đi qua các lập luận CELERY_RESULT_BACKEND cho người xây dựng cần tây:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     CELERY_RESULT_BACKEND='amqp://', 
     include=['proj.tasks']) 

Giải pháp là sử dụng đối số phụ trợ thay thế:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     backend='amqp://', 
     include=['proj.tasks']) 
Các vấn đề liên quan