%{base_url} 来自哪里?

大家好:

我正在运行一个使用 Bitnami 镜像的 Discourse 容器。我遇到的问题是,所有模板都将 %{base_url} 变量设置为 example.com,而且我似乎无法更改它。

我在 Bitnami 创建了一个支持工单,但在搜索时,我在互联网上找不到任何关于 base_url 变量的信息。

有人能帮我弄清楚吗?我对这个变量感到非常困惑。

我们不支持使用 Bitnami 镜像进行安装。如果您希望获得支持,建议按照标准安装指南安装 Discourse。

1 个赞

我明白了,但这不在基础中,与我的问题无关:%{base_url} 来自哪里,或者它基于什么?我在 Discourse 文档或论坛中都找不到它。

如何将 %{base_url} 从 example.com 更改为我自己的 domainname,以便我的电子邮件模板能如预期地解析?

如果此处的域未正确填充,则表示您的安装可能出现了问题。

如前所述,如果您仍未找到问题所在,遵循标准安装并恢复备份可能会更容易。

1 个赞

为什么它被填充而不是简单地设置为一个变量?

您似乎需要编辑 Docker Compose YAML 才能拉取它:containers/bitnami/discourse/docker-compose.yml at main · bitnami/containers · GitHub (第 31 行和第 51 行)

我知道,但第一次运行后更改它并不能解决问题,所以我怀疑是否需要从第一次运行开始进行更改,因为我想知道它是否是静态设置此主机(名称)的。

Bitnami 容器在更新时是否也像官方容器一样全新编译 Discourse?
变量似乎定义在这里:

current_hostname 变量在此处设置:

force_hostname 变量在此处的站点设置模板中声明:

由于它是隐藏的,因此无法在管理员设置中更改。与其他站点设置一样,我假设它会存储在数据库中。我搜索了我们实例的数据库转储,发现 force_hostname 未设置,甚至未声明。在我们的官方 discourse 容器 YAML 中,我们分配了 DISCOURSE_HOSTNAME,但我猜这只是一个全局设置,而不是站点设置,所以这似乎是以不同的方式强制执行的。

current_hostname 似乎是从当前连接获得的,即动态的。但我看不到它确切的定义位置,可能是外部模块/gem:

我不确定 Bitnami 容器如何处理 DISCOURSE_HOST 设置,所以至少你可以搜索数据库中的 force_hostname,直到我们弄清楚官方容器中的 DISCOURSE_HOSTNAME 是如何存储和强制执行的。

感谢您到目前为止的支持!与您的发现相比,我也在考虑将我的安装配置为单个多站点。这也许能解决问题,但确实是试图弄清楚一些事情,我感觉 Bitnami 没有对 Discourse 本身做任何更改;所以为什么会出现这个问题。\n\n我需要检查我的转储。

在我的数据库转储中找不到这个。

好的,目前我无法理解 Discourse 容器的两种变体是如何在内部根据容器 YAML 应用主机的。

Bitnami 容器组合不包含另一个 Web 服务器,而是直接暴露 Discourse Web 端口吗?官方容器在 Discourse 前面有另一个 Nginx,这正是我希望尽可能摆脱的,因为我们已经有一个在容器外的 Apache Web 服务器。