2012-06-19 22 views
5

Vấn đề của tôi phải khá đơn giản và là một câu hỏi đáng quan tâm hơn cái gì đó cần được khắc phục tuyệt vọng. Google không thể cho tôi câu trả lời tôi đang tìm kiếm vì vậy tôi hy vọng chuyên môn của bạn có thể giúp tôi. Tôi đang sử dụng:Django và Celery: danh sách nhiệm vụ quản trị không hiển thị giá trị

Django 1.4 
Celery 2.5.5 
Redis 2.4.10 (latest version on homebrew?) 

Và tôi chạy tất cả mọi thứ bằng cách sử dụng lệnh follwing:

redis-server /usr/local/etc/redis.conf 
foreman run python manage.py runserver 
foreman run "python manage.py celeryd -E -B --loglevel=INFO" 
foreman run python manage.py celerycam 

Trong settings.py của tôi, tôi đã cấu hình sau đặt ra cho Cần tây:

import djcelery 
djcelery.setup_loader() 

BROKER_URL = redis 
CELERY_RESULT_BACKEND = 'redis' 
CELERY_REDIS_HOST = "localhost" 
CELERY_REDIS_PORT = 6379 
CELERY_REDIS_DB = 0 

CELERY_SEND_TASK_ERROR_EMAILS = True 
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' 
CELERY_TASK_RESULT_EXPIRES = 172800 # 48 hours. 

Với cấu hình này tất cả có vẻ như đang hoạt động, ngoại trừ một điều:

Với django-celery bạn utomatically có được hội nhập cần tây trong quản trị django (gọn gàng!), bạn có thể kiểm tra tình trạng của tất cả các nhiệm vụ của bạn mà không hết hạn và lịch trình nhiệm vụ mới, vv

Trong danh sách nhiệm vụ trong quản trị, không có giá trị được hiển thị, có nghĩa là tất cả các giá trị là None. khi tôi nhấp vào một giá trị tôi có thể xem chi tiết tuy nhiên do đó, nó trông giống như họ đang được thu thập một cách chính xác. Nó chỉ là một chi tiết nhưng nó làm phiền tôi rất nhiều.

Điều gì có thể là lý do khiến nó không hiển thị các giá trị đó trong danh sách và tôi có thể làm gì để khắc phục sự cố?

Cảm ơn trước

Edit: ảnh chụp màn hình

Vì vậy, đây là một số ảnh chụp màn hình, như bạn có thể xem tất cả các giá trị như uuid vv là Không nhưng nó thấy thời tiết nhiệm vụ đã hoàn thành hay không . Trong ảnh chụp màn hình thứ hai, bạn có thể xem trang chi tiết (sau khi bạn nhấp vào một tác vụ) và ở đây nó có tất cả thông tin.

The django-celery admin task list not displaying all values Và hình ảnh thứ hai:

The detail page of a task displaying all values

+0

Bạn có ý nghĩa gì với "Trong danh sách nhiệm vụ trong quản trị viên, không có giá trị nào được hiển thị, nghĩa là tất cả các giá trị là Không": bạn có thấy các tác vụ có trạng thái (chẳng hạn như STARTED, SUCCESS, FAILURE) không? Nếu vậy, điều đó có nghĩa là celerycam đang hoạt động đúng cách. Bạn đang nói về những giá trị nào? –

+0

xin vui lòng xem những hình ảnh tôi đã thêm vào bài –

Trả lời

2

Tôi có điều này là tốt. Nó dường như là một lỗi trong django-cần tây. Bạn nên cập nhật phiên bản django-cần tây của bạn nếu bạn muốn điều này được cố định (nó đã được sửa trong this commit trong django-cần tây).

Nếu bạn thay đổi như sau (tại djcelery.admin_utils trong hàm fixedwidth):

return """<span title="%s", style="font-size: %spt;\ 
       font-family: Menlo, Courier; ">%s</span>""" % (
    escape(val[:255]), pt, escape(shortval)).replace("|br/|", "<br/>") 

thành:

return ("""<span title="%s", style="font-size: %spt;\ 
        font-family: Menlo, Courier; ">%s</span>""" % (
     escape(val[:255]), pt, escape(shortval))).replace("|br/|", "<br/>") 

sau đó các giá trị làm xuất hiện trong admin.

+0

Thật không may rằng sẽ không có một lựa chọn vì heroku không cho phép điều này, và để git clone thay vì pip cài đặt cho một cái gì đó đơn giản này sẽ không làm một trong hai. Hy vọng bản phát hành 2.6 sẽ sớm ổn định! –

+0

Bạn có thể monkeypatch mã mặc dù để làm cho nó hoạt động trong phiên bản hiện tại. –

0

Tôi cũng gặp lỗi tương tự. Ví dụ về cập nhật admin_utils.py có một lỗi nhỏ mặc dù! Các thay thế bạn cần thực hiện là:

Thêm FIXEDWIDTH_STYLE ở đầu admin_utils.py:

FIXEDWIDTH_STYLE = '''\ 
<span title="%s", style="font-size: %spt; \ 
font-family: Menlo, Courier; ">%s</span> \ 
''' 

Và sau đó thay thế:

return """<span title="%s", style="font-size: %spt;\ 
       font-family: Menlo, Courier; ">%s</span>""" % (
    escape(val[:255]), pt, escape(shortval)).replace("|br/|", "<br/>") 

Với:

styled = FIXEDWIDTH_STYLE % (escape(val[:255]), pt,escape(shortval)) 
return styled.replace("|br/|", "<br/>") 

Bạn có thể nhìn thấy nó rõ ràng hơn trong liên kết github trên. Hoạt động hoàn hảo! Chúc mừng!