Django Wagtail pageurl 模板标签返回不正确的主机名

Django Wagtail pageurl template tag returning incorrect host name

我正在使用 Wagtail 1.8 和博客索引页面上的 pageurl 模板标签到 hyperlink 博客的标题到实际的博客页面。很标准的东西。这是一个 Django 1.10 项目。

<a class="blog-post-link" href="{% pageurl blog %}">
    <h2>{{ blog.title }}</h2>
</a>

我遇到的一个非常奇怪的问题是站点的主机名正在被托管该站点的服务器的主机名替换。例如,正确的 link 应该是:

https://beadtrails.com/blog/vernon-bc-what-to-do-on-and-off-the-trails/

但是,它有时会返回为 https://graphicearth.ca/blog/vernon-bc-what-to-do-on-and-off-the-trails/

当我有时说,如果我进入 wagtail 管理站点页面,然后进入主机记录并保存它,它会解决问题——暂时。然后它将恢复为不正确的 url.

如您所想,这不是您的博客 link 以 404 错误结尾的好情况!

为了解决问题,我检查了 Wagtail 和 Django 站点表的配置,检查了配置文件是否正确识别 SITE_ID,对所有源代码进行了文本搜索 'graphicearth.ca',检查了 uWSGI 和 nginx 配置文件,检查了 Wagtail 中博客层次结构相对于主页的正确性,检查了浏览器中的 headers 以确保传递了正确的主机。一切正常。

深入研究位于 wagtailcore_tags.py 中的模板标签的源代码,该函数的注释说:

Outputs a page's URL as relative (/foo/bar/) if it's within the same site as the current page, or absolute (http://example.com/foo/bar/) if not.

因此,出于某种原因,代码最终认为这些站点是不同的——但并非始终如此。如上所述,如果我进入 Wagtail 管理员和 re-save 网站条目,它会修复一段时间。

由于这是在生产系统上,因此很难调试。有没有人对可能导致此问题的原因有任何建议 and/or 如何调试它?

应用程序堆栈是: - 姜戈 1.10.5 - 鹡鸰 1.8 - uWSGI - nginx

答案更新: Tom 的回答促使我找到了解决方案,因此我将他的回答标记为正确。我在多个站点上使用相同的 memcached 实例,并且密钥必须被交叉。我恢复到基本的 django 缓存,它解决了问题。是时候为同一台服务器上的多个站点找到更好的缓存解决方案了。

您是否在生产系统上配置了缓存? pageurl 模板标签调用 get_site_root_paths() which uses a cache of site root paths if one is available. The cache should be purged if sites are edited or deleted, but perhaps you could try configuring settings.CACHES to use DummyCache 来帮助追踪问题。