将 WP Discourse 连接到运行特定版本的本地 Discourse 实例

我刚在 WordPress 6.7.2 和 php-fpm-8.3.17-1.fc41.x86_64 上安装此插件,但它不起作用。当我点击“保存选项”时,我在日志中看到以下错误。

[2025-02-21 17:15:13] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""} 

/var/log/php-fpm/www-error.log 中有相应的错误:

[21-Feb-2025 17:14:42 UTC] PHP Warning:  Undefined array key "url" in /wordpress/wp-content/plugins/wp-discourse/lib/discourse.php on line 301

我看到 Report - WP-Discourse 2.5.9 - PluginTests.com 的“烟雾测试”中也报告了相同的错误。

编辑:关于未定义的 url 错误不用管了。它似乎只是在完成网络表单之前的初始错误。但是,每次点击“保存选项”按钮时,我仍然会收到 wpdc_response_error。

编辑2:我在 Discourse 端看到 403 Forbidden,但不清楚为什么我的 WordPress 站点的连接被禁止了。我可以使用相同的 API 密钥成功地与 curl 一起使用。

Completed 403 Forbidden in 33ms (Views: 0.3ms | ActiveRecord: 15.1ms (2 queries, 0 cached) | GC: 2.2ms)

我正在开发模式下运行 Discourse 3.5.0.beta1-dev。

编辑3:我发现此版本的 Discourse 中有特殊的 WordPress 权限用于 API 密钥。使用“Granular”而不是“Global”并勾选 WordPress 下的框消除了 403 Forbidden 错误。但是,我仍然收到发送到 WordPress 的空/无效回复。

Delivering messages [] to client d9fbb33f11ed404bbc361c459802c87d for user 1 (chunked)

我想我需要使用旧版本的 Discourse 和 WordPress 插件。它支持的最新版本是什么?

@Gregory_Bartholomew,让我们来看看您的问题所在。

它适用于最新版本的 Discourse。

当您说您在“开发模式”下运行 Discourse 时,您的意思是在本地运行吗?如果不是,您是在什么环境下运行的?

在尝试使用具有细粒度权限的密钥之前,您能否尝试使用第一个帖子视频中显示的全局密钥?

谢谢。我正在尝试重新安装 Discourse。我已检出 3.3.0 版本进行测试。

我正在尝试在本地安装 Discourse,而不是使用 Docker 容器,因为 ZFS 中存在一个错误,导致 Docker 容器在 ZFS 文件系统上无法成功构建(pnpm issue 7024)。如果我在本地安装 Discourse,我可以通过在运行 pnpm install 之前向 .npmrc 添加 package-import-method=hardlink 来绕过 ZFS 错误。

我的意思是我有 RAILS_ENV=development。我现在将尝试使用 RAILS_ENV=production 重新尝试。

另外,我正在尝试修改上面链接的指南,使其能在 Fedora Linux 上运行。

编辑:我使用 3.3.0 版本不太顺利。

$ pnpm install
 WARN  pnpm 不支持 package.json 中的 "workspaces" 字段。请改用 "pnpm-workspace.yaml" 文件。
 ERR_PNPM_INVALID_SELECTOR  无法解析 "**/unset-value" 选择器

我猜我将再次尝试 3.4.0 版本,看看效果如何。:confused:

我重新安装了 Discourse 3.4.0 版本:

但是,我无法让它在生产模式下运行。我不确定为什么。它只显示“糟糕……”,而且我在日志中看不到太多信息。我认为问题可能与某些代理设置有关,但不确定。

无论如何,我将 RAILS_ENV 设置回“development”,它就可以运行了。但是,当我尝试从 WordPress 连接时,仍然收到相同的错误:

[2025-02-21 22:11:06] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""}

但我可以看到查询正在命中 Discourse,所以我不知道为什么它不起作用。

GET "/site.json" for 000.123.456.789 at 2025-02-21 16:11:05 -0600
10:11 pm
Processing by SiteController#site as JSON
10:11 pm
ApiKey Load (9.0ms) SELECT "api_keys".* FROM "api_keys" WHERE (revoked_at IS NULL) AND "api_keys"."key_hash" = '3f27a89fedae42123b9ad596fae6c06d36748f53bd241213941083af49cf5e46' ORDER BY "api_keys"
10:11 pm
ApiKeyScope Load (10.6ms) SELECT "api_key_scopes".* FROM "api_key_scopes" WHERE "api_key_scopes"."api_key_id" = 1
10:11 pm
User Load (8.1ms) SELECT "users"."id", "users"."username", "users"."created_at", "users"."updated_at", "users"."name", "users"."last_posted_at", "users"."active", "users"."username_lower", "users".
10:11 pm
UserOption Load (6.1ms) SELECT "user_options"."user_id", "user_options"."mailing_list_mode", "user_options"."email_digests", "user_options"."external_links_in_new_tab", "user_options"."enable_quoti
10:11 pm
Group Load (8.6ms) SELECT "groups"."id", "groups"."name", "groups"."flair_icon", "groups"."flair_upload_id", "groups"."flair_bg_color", "groups"."flair_color" FROM "groups" ORDER BY groups.name ASC
10:11 pm
(7.0ms) SELECT "categories"."id" FROM "categories" WHERE "categories"."read_restricted" = FALSE
10:11 pm
(10.7ms) SELECT "categories"."id" FROM "categories" WHERE "categories"."read_restricted" = TRUE
10:11 pm
Topic Count (4.1ms) SELECT COUNT(*) FROM (SELECT 1 AS one FROM "topics" WHERE "topics"."deleted_at" IS NULL LIMIT 16) subquery_for_count
10:11 pm
(6.1ms) SELECT "users"."id" FROM "users" INNER JOIN "user_auth_tokens" ON "user_auth_tokens"."user_id" = "users"."id" WHERE "users"."admin" = TRUE AND (users.id > 0) ORDER BY user_auth_tokens.crea
10:11 pm
(8.5ms) SELECT "categories"."id" FROM "categories" WHERE "categories"."topic_featured_link_allowed" = TRUE
10:11 pm
ColorScheme Load (6.8ms) SELECT "color_schemes".* FROM "color_schemes" WHERE (color_schemes.id NOT IN (SELECT color_scheme_id FROM theme_color_schemes)) AND "color_schemes"."id" = 1 LIMIT 1
10:11 pm
ColorSchemeColor Load (7.8ms) SELECT "color_scheme_colors".* FROM "color_scheme_colors" WHERE "color_scheme_colors"."color_scheme_id" = 1 ORDER BY id ASC
10:11 pm
(6.0ms) SELECT "group_users"."group_id" FROM "group_users" WHERE "group_users"."user_id" = -1
10:11 pm
(8.0ms) SELECT "category_users"."category_id", "category_users"."notification_level" FROM "category_users" WHERE "category_users"."user_id" = -1
10:11 pm
UserField Load (9.5ms) SELECT "user_fields"."id", "user_fields"."name", "user_fields"."created_at", "user_fields"."updated_at", "user_fields"."editable", "user_fields"."description", "user_fields".
10:11 pm
Completed 200 OK in 256ms (Views: 0.3ms | ActiveRecord: 116.4ms (15 queries, 0 cached) | GC: 94.6ms)

我想我会暂时休息一下,但如果你对可能出错的地方有什么想法,我很想得到一些提示。:slightly_smiling_face:

我已将此对话移至一个独立的主题,因为您遇到的问题可能会让其他运行标准设置的人感到困惑。

好的,总结一下:

  1. 您正在本地计算机上运行 Discourse。
  2. 您正在运行特定版本。您目前运行的是 3.4.0。
  3. 您正尝试将本地实例连接到远程 WordPress 实例。

以上是否有不正确之处?另外,您能否澄清以下几点:

  1. 您如何从本地计算机连接到远程 WordPress 实例?您在使用 ngrok 吗?
  2. 您为什么要运行特定版本的 Discourse 而不是最新版本?
  3. 您的总体目标是什么?
2 个赞

是的。

是的。

我的测试 WordPress 实例也在本地运行。

不,一切都在本地。我有两个 httpd 实例在运行,它们监听不同的 IP 地址(一个用于 WordPress,另一个用于 Discourse)。WordPress 实例直接在我的宿主系统上运行,Discourse 实例运行在一个 systemd-nspawn 容器中。宿主系统和容器都运行 Fedora Linux 41。

我最初尝试了 Docker 实例,但它在我的测试机器上无法构建。研究错误消息后,我发现了一个公开的 bug 报告,其中指出问题出在 ZFS 文件系统上。我不知道如何修改 Docker 镜像来应用解决方法,所以我找到了克隆源代码仓库并使用它来构建 Discourse 的说明。

我最初构建了最新版本(3.4.0),但行为似乎与您的视频显示的不同。当 WordPress 尝试使用 API 密钥连接时(当权限设置为“全局”时),我会在 Discourse 日志中看到 403 Forbidden。将权限更改为“精细”并勾选 WordPress 的所有框可以使查询进一步进行,但 WordPress 收到了空/无效的响应。然后我注意到 https://blog.discourse.org/ 上推广的最新版本是 3.4,所以我认为我遇到的一些问题可能是因为我试图运行一个预发布版本。我尝试 git checkout v3.3.0,认为它足够旧,可以与我试图测试的 WordPress 插件完全兼容,但它在我的系统上无法构建,所以我签出了 3.4.0 版本,它似乎可以工作(尽管处于“开发”模式)。

我只是想尝试和熟悉 WordPress Discourse 插件。我根本不关心 Discourse。我只需要一个测试对象。一旦我熟悉了它的工作原理,我可能会尝试将该插件安装在一个生产站点(fedoramagazine.org)上,并将评论重定向到 discussion.fedoraproject.org 上的生产 Discourse 实例。

1 个赞

这是我在这论坛上读过的最悲伤的一句话!:lolsob:

1 个赞

该问题与您的本地设置和网络有关。它不会是因为 Discourse 的版本,或者全局密钥和细粒度密钥之间的差异。由于您可以在本地运行 WordPress 和 Discourse 的方式和环境多种多样,因此我很难调试您的本地应用程序互连问题。以下是一些帮助您的技巧。

  1. 始终运行最新版本的 Discourse、WordPress 和 WP Discourse 插件。
  2. WP Discourse 的 localhost Discourse URL 中使用端口 3000 而不是端口 4200。
  3. 确保您创建的密钥可以被您设置为“发布用户名”的管理员用户名使用。

这是我的本地设置,我的本地 WordPress 和 Discourse 已相互连接。我使用 MAMP Pro 在本地运行 WordPress。


3 个赞

成功了!!!

感谢您关于直接连接到端口 3000 的提示。这似乎是关键所在。

值得注意的一点(至少在我本地配置中)是我在启动 ember-cli 之前还需要设置 ALLOW_EMBER_CLI_PROXY_BYPASS=1

3 个赞