Django Wagtail pageurl模板标签返回错误的主机名

时间:2017-01-27 18:11:30

标签: django uwsgi wagtail

我在博客索引页面上使用 Wagtail 1.8 pageurl 模板标记,将博客标题超链接到实际的博客页面。很标准的东西。这是一个 Django 1.10 项目。

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

我遇到的一个非常奇怪的问题是网站的主机名被托管该网站的服务器的主机名所取代。例如,正确的链接是:

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。

您可以想象,这不是一个很好的情况,您的博客链接以404错误结束!

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

深入了解wagtailcore_tags.py中模板标记的源代码,该函数的注释说:

  

将页面的URL输出为相对(/ foo / bar /),如果它在同一网址内   site作为当前页面,或绝对(http://example.com/foo/bar/)if   不

因此,出于某种原因,代码最终认为网站是不同的 - 但不是所有时间。如上所述,如果我进入Wagtail管理员并重新保存网站条目,它会修复一段时间。

由于这是在生产系统上,因此调试起来相当困难。有没有人对可能导致此问题的原因和/或如何调试它有任何建议?

应用程序堆栈是:   - Django 1.10.5   - Wagtail 1.8   - uWSGI   - nginx

回答更新 汤姆的回应是我找到解决方案的原因所以我将他的答案标记为正确。我在多个站点使用相同的memcached实例,键必须越过。我恢复到基本的django缓存,它解决了这个问题。是时候在同一台服务器上找到更好的多个站点缓存解决方案了。

1 个答案:

答案 0 :(得分:2)

您是否在生产系统上配置了缓存? pageurl模板标记调用get_site_root_paths(),如果有可用的话,它会使用站点根路径的缓存。如果编辑或删除网站,则应清除缓存 ,但也许您可以尝试configuring settings.CACHES to use DummyCache来帮助追踪问题。