1

尝试从环境变量动态创建 Django_rq 队列配置时,我遇到了一种奇怪的行为。

我的环境变量是:

CUSTOM_QUEUES=default:q1:q2

进入我的 settings.py 我有:

from getenv import env



# Cache
CACHES_DEFAULT = "redis://127.0.0.1:6379/1"
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": env("CACHE_URL", CACHES_DEFAULT),
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
        'TIMEOUT': 3600
    },
}


RQ_QUEUES_REDIS = {'USE_REDIS_CACHE': 'default'}
RQ_QUEUES = {k:RQ_QUEUES_REDIS for k in env('CUSTOM_QUEUES', "default").split(':')}

我期待 denerated RQ_QUEUES dict 像这个正在工作的那样:

RQ_QUEUES = {
    'default': {
        'USE_REDIS_CACHE': 'default',
    },
    'q1': {
        'USE_REDIS_CACHE': 'default',
    },
    'q2': {
        'USE_REDIS_CACHE': 'default',
    },
}

即使配置似乎运行良好并且我可以从 django_rq 网页看到队列,但我的工作人员无法连接并实际上抛出此错误,就像 redis 中没有队列键一样

回溯(最后一次调用):文件“manage.py”,第 10 行,在 execute_from_command_line(sys.argv) 文件“/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django/core/ management/ init .py”,第 350 行,在 execute_from_command_line utility.execute () 文件“/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django/core/management/init.py”,第 342 行,在执行 self.fetch_command(subcommand).run_from_argv(self.argv) 文件“/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django/core/management/base .py”,第 348 行,在 run_from_argv self.execute(*args, **cmd_options) 文件“/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django/core/management/base.py ”,第 399 行,在执行输出 = self.handle(*args, **options) 文件“/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django_rq/management/commands/rqworker.py ",第 79 行,在处理队列 = get_queues(*args) 文件中 "/home/work/virtualenv/runaway_dev/lib/python3.6/site-packages/django_rq/queues.py",第 166 行,在 get_queues queue_params = QUEUES [queue_names[0]] KeyError:'默认'

顺便说一句:如果我使用上面的静态配置,它工作得很好,所以我的嫌疑人更关注 Django_rq 而不是创建队列,但也许我也在 Django 的设置上做了一些不正确的事情。

任何帮助将非常感激。谢谢。

F。

4

0 回答 0