【问题标题】:Django compress error: Invalid input of type: 'CacheKey'Django压缩错误:类型无效输入:'CacheKey'
【发布时间】:2019-04-19 06:16:13
【问题描述】:

在生产服务器上压缩 django 静态文件时,我们突然开始遇到这个问题。 Ubuntu 16.04、Python 3.x、Django 1.11。我正在使用 ansible-playbook 进行部署。

错误如下:

CommandError: An error occurred during rendering /chalktalk/app/chalktalk-react-40/chalktalk-react-40/chalktalk/apps/exams/templates/exams/section-edit.html: Invalid input of type: 'CacheKey'. Convert to a byte, string or number first.

这似乎不是其中一个静态文件的问题,而是一般问题。每次我们运行它,我们都会得到一个不同的文件。

我在谷歌上寻找任何线索,但没有出现同样的错误。

【问题讨论】:

  • 好时机!我敢肯定,所有使用 django-redis 的人都必须通过意外的向后不兼容更改破坏了他们的 prod 环境。
  • @Babu 它只破坏了我们的 CI。这并不是 redis-py 的错,毕竟这是一个 major 版本的颠簸,所以明确地不期望兼容性。 django-redis 应该限制他们允许的版本,但即使这也不是他们的“不兼容的变化”,只是他们 setup.py 中的一个错误。
  • 是的,这里不怪任何人:)

标签: python django ansible django-compressor


【解决方案1】:

尝试在版本 3 以下安装 redis-py

【讨论】:

  • 这看起来像是评论,请删除并粘贴您的正确答案并阅读How to Write good answer
  • 从技术上讲,他是正确的,但如果不提供任何支持文档等,就无法对其进行评估。
【解决方案2】:

这是由于 v2 和 v3 之间的 redis 库发生了变化。从 2017 年 8 月 17 日起,尝试将您的 redis 版本固定为 2.10.6,这是更改前的最后一个 redis 版本。

pip install redis==2.10.6
# and/or
echo redis==2.10.6 >> requirements.txt

我不确定您使用的哪个包可能需要 redis 作为依赖项,或者您是否自己使用它。无论哪种情况,其过程都是相同的。

在我的例子中,这通过django-redis 包显示,它需要底层的redis 包。 Django-redis 不限制 最大 版本,因此它会很高兴地升级到主要版本的颠簸,这是您无法真正做到的,因为您希望 API 会更改!

确切的代码(在我的例子中),在django-redis的master中:

install_requires = [
    "redis>=2.10.0",
]

但真的应该是这样的

install_requires = [
    "redis>=2.10.0, <3",
]

编辑:我刚刚找到了bug report in django-redis (#342) about this,但是当我研究它时,这个SO问题首先出现在谷歌中。

【讨论】:

  • 谢谢安德鲁。实际上,我的 requirements.txt 中有 django-redis-cache==1.6.5 celery[redis]==3.1.23 asgi-redis==1.4.3 channels-redis==2.1.0。但我发现 ansible playbook 正在安装 debian 软件包,其中一个是 redis-tools 并且没有版本要求,因此它正在安装 3.0.6
  • 我是否只需在 django-redis-cache 和其他依赖于 redis 的包之前添加到 requirements.txt 文件 redis==2.10.6 来固定 redis 版本?
  • 我刚刚在我的 requirements.txt 中添加了 redis==2.10.6 并且它起作用了 :)
  • @nmusleh 是的,如果您通过pip install -r requirements.txt 安装,这就是您所需要的,因为它将强制使用该版本。如果您正在使用其他包管理器,或者如果使用 --upgrade 手动安装/升级,那么它将升级依赖项,除非您告诉它不要使用 --no-deps
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2018-09-29
  • 2020-02-29
  • 1970-01-01
相关资源
最近更新 更多