插件在每次更新后尝试重新发布到 Discourse

您好,
我注意到我们网站上的 WP Discourse 插件存在一个问题。
基本上,在我们成功发布一篇博客文章到 Discourse 论坛后,比如说一周后,如果我们对文章进行微小的更改并更新它,WP Discourse 插件会尝试再次将其发布到论坛。
然后我会收到一封“Discourse 发布失败”的电子邮件,提示嵌入式 URL 已被占用。

我也注意到,在更新非常旧的 WordPress 文章时,它们会出现在 Discourse 论坛的默认类别“新闻”中,这会让读者感到困惑。

是否有我遗漏的设置可以避免这种情况?
非常感谢!

感谢您的报告。我将尽快仔细研究这种情况,希望是明天,最晚不迟于下周初。

2 个赞

@npm0912,你能帮我做一个测试吗?

你能尝试重现这个问题吗,但在你进行更改之前(一周后,或任何正常的间隔时间),请在帖子编辑屏幕右侧的 Discourse 实用程序栏中检查 Discourse 帖子的状态。告诉我你在进行编辑时那里显示的内容,然后在编辑后是否会出现你刚才描述的行为。

另外,请与我分享你的 WP Discourse 日志下载。

当我尝试编辑大约 10 天前发布的帖子时,我看到了这个 Discourse 帖子状态:

尝试更新帖子时,发生了同样的错误。我也收到了关于失败的相同电子邮件。
日志中的最后一个错误是:

[2024-05-13 18:02:53] publish.ERROR: create_post.post_error {"wp_title":"Nextcloud exhibiting at global events in May 2024","wp_author_id":"9","wp_post_id":209030,"response_message":"Embed url has already been taken","http_code":422}

设置页面上不应该有一个选项,可以在帖子已在 Discourse 中时禁用重新发布尝试吗?
谢谢!

好的,这意味着您的 WordPress 实例未能正确保存 WP Discourse 插件的帖子元数据字段,很可能是由于您网站上的另一个插件或主题所致。您能否分享 WP Discourse 日志下载?其中将包含插件列表,这或许能暗示出问题所在。

通常情况下,插件会在首次发布后保存发布详情。而您的网站上没有发生这种情况。这正是我们需要弄清楚的地方 :slight_smile:

好的,这很奇怪……我以为那是个 bug。我附上了元数据文件。如果这个文件足够的话,请告诉我

wp-discourse-logs-metafile-2024-04-17-2024-05-13.txt (2.5 KB)

如果知道有哪个插件可能会干扰 Discourse 插件,请告诉我。

非常感谢您花时间调查此事!

您有几个插件可能是罪魁祸首。作为第一步,请在 WP Discourse 的“发布”设置中启用此选项。

它会改变插件保存自定义字段的方式,并可能影响您的情况下的行为。这可能无法解决问题,但可能会给我们提供更多见解。启用后,请尝试重现相同的情况。

在尝试了这一点之后,我们将禁用单个插件以查看是否可以隔离问题。您是否有暂存站点(即,具有您的主题和插件但没有真实数据的站点)?

我还会向插件中的发布逻辑添加更多日志记录,以帮助阐明此类问题(即,在发布到 Discourse 后在 WordPress 中存储元数据)。但这需要一些时间,在此期间我们可以执行上述一些测试。

您好,再次感谢您的时间!

我启用了该设置,但问题仍然存在。
我们实际上使用的是一个暂存网站,有趣的是,即使插件、主题和文件完全相同,它的行为也不同——也就是说,在我发布一个测试帖子后,它会正确地发布到 Discourse,然后如果我回到同一个帖子,我不会在 Discourse 侧边栏设置中看到“Embed url has already been taken”错误。相反,我会看到它像这样:

所以服务器差异是:
暂存网站:
WordPress - 6.5.3
PHP - 8.1.27
MySQL - 10.6.16

实际网站:
WordPress - 6.5.3
PHP - 8.1.2-1ubuntu2.17
MySQL - 5.5.5

@npm0912,这表明问题出在你的环境中。

  1. 你能否分享来自两个实例的 WP Discourse 日志查看器中的完整“meta”文件?
  2. 你正在使用的用于暂存的 Discourse 与用于生产的 Discourse 有何不同?
  3. 你在 WordPress 生产环境中使用任何缓存、CDN 或负载均衡解决方案,而暂存环境未使用吗?

@angus

  1. 好的,这是日志:
    暂存:
    Staging wp-discourse-logs-metafile-2023-04-13-2024-05-28.txt (2.4 KB)
    生产环境:
    LIVE wp-discourse-logs-metafile-2024-05-13-2024-05-28.txt (2.4 KB)

  2. Discourse 实例是相同的,唯一的区别是我从暂存环境发布到另一个论坛类别。

  3. 我在两个实例上都使用 WP Rocket 和 Redis 缓存,所以我想这不会有影响。

谢谢!

两者之间存在一些细微的差异。可能不是原因,但值得注意的是,为了排除其成为原因的可能性,无论是此处还是其他问题,都应保持您的暂存站点和生产站点完全相同。

除此之外,我建议您仔细检查 WP Rocket 的设置(例如,两个站点之间的设置是否确实相同)。虽然 WP Rocket 在其特定用途方面效果很好,但它通常是 WordPress 插件出现问题的根源。

请注意,WordPress 目前需要 MySQL 8.0 或更高版本。您需要升级您的生产数据库。

交叉引用:Could not update the meta value of discourse_post_id in database - #2 by angus

实际上,WP Discourse 关于数据库的信息有误。数据库的正确版本是 10.6.16-MariaDB-0ubuntu0.22.04.1。

该文件中打印的版本是 WordPress 核心函数 db_version() 的输出:

$wpdb->db_version()

在此处查看代码,并进一步参阅

这就是 WordPress 认为它正在使用的版本。这似乎是您的问题。

你说得对。我再次检查了主题内的 db_version() 函数,确实得到了 5.5.5 的结果。但在“站点健康”后端页面,我看到版本是 10.6.16-MariaDB——这与系统管理员告诉我的版本相同……我的意思是,WordPress 也应该看到这个版本,对吧?

抱歉,这里可能存在多种问题,在查看您的服务器之前,无法有信心地确定具体原因。

鉴于您报告的问题,我建议您彻底调查这个方面。