Django和Celery:管理员任务列表不显示值

时间:2012-06-19 09:42:32

标签: django django-admin redis celery django-celery

我的问题应该是相当简单的,而不是需要拼命修复的问题。谷歌无法给我我想要的答案,所以我希望你的专业知识可以帮助我。我正在使用:

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

我正在使用以下命令运行所有内容:

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

在我的settings.py中,我为Celery配置了以下配置:

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.

使用这种配置,一切似乎都有效,除了一件事:

使用django-celery,您可以在django admin中自动获得芹菜整合(整洁!),您可以检查所有未过期的任务的状态并安排新任务等。

在admin的任务列表中,不显示任何值,表示所有值均为None。当我点击一个值时,我可以看到详细信息,所以它看起来确实正在被正确收集。这只是一个细节,但它让我很烦恼。

可能是因为它没有在列表中显示这些值,我该怎么做才能修复它?

提前致谢

编辑:屏幕截图

所以这里有一些截图,因为你可以看到像uuid等所有的值都是None,但它确实看到任务完成与否。在第二个屏幕截图中,您可以看到详细信息页面(在您单击任务后),此处它包含所有信息。

The django-celery admin task list not displaying all values 第二张图片:

The detail page of a task displaying all values

2 个答案:

答案 0 :(得分:2)

我也有这个。它似乎是django-celery中的一个错误。如果你想修复它,你应该更新你的django-celery版本(它已经在django-celery的this commit修复了。)

如果您更改以下内容(在djcelery.admin_utils函数fixedwidth处):

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

成:

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

然后值会出现在管理员中。

答案 1 :(得分:1)

我也有同样的错误。 有关更新admin_utils.py的示例虽然有轻微错误! 您需要进行的替换是:

在admin_utils.py:

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

然后替换:

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

使用:

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

您可以在上面的github链接中更清楚地看到它。 作品完美! 干杯!