5

我的问题应该相当简单,与其说是需要拼命解决的问题,不如说是一个有趣的问题。谷歌无法给我我正在寻找的答案,所以我希望你的专业知识可以帮助我。我在用:

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 管理员中获得 celery 集成(整洁!),您可以检查所有未过期任务的状态并安排新任务等。

在 admin 的任务列表中,没有显示任何值,这意味着所有值都是 None。当我单击一个值时,我可以看到详细信息,因此看起来它们确实被正确收集了。这只是一个细节,但它让我很恼火。

它没有在列表中显示这些值的原因可能是什么?我能做些什么来解决它?

提前致谢

编辑:截图

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

django-celery 管理任务列表未显示所有值 第二张图片:

显示所有值的任务的详细信息页面

4

2 回答 2

2

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

如果您更改以下内容(在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/>")

然后这些值确实出现在管理员中。

于 2012-06-19T11:50:50.940 回答
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 链接中更清楚地看到它。完美运行!干杯!

于 2012-06-20T16:54:04.043 回答