邮件通知模板 GUI 抱怨 %{base_url}

升级到 3.1.1 版本(从 2.8.x)后,我所有使用 %{base_url}%{url} 来包含主题链接的旧模板现在都被标记为无效,GUI 显示 以下插值键无效:base_url

但实际上它是有效的,因为如果我删除它只留下 %{url},链接就会断开(只包含路径,不包含域名),如果我包含它,链接就是完整有效的。

1 个赞

这可能与旧版本的 Discourse 有所不同,但我不认为这是一个错误。查找电子邮件模板允许的插值键一直很棘手。我们现在有一个主题,解释了可以使用哪些键:https://meta.discourse.org/t/interpolation-keys-for-customizing-text-and-email-templates/264604。允许的键在此处列出:https://github.com/discourse/discourse/blob/main/app/models/translation_override.rb。

{base_url} 不在该列表中。

既然您已经知道您站点的基本 URL,我不确定是否需要该键。请使用您站点的 URL,而不是 %{base_url}%{url}。例如 https://forum.example.com%{url}

2 个赞

但它确实有效,即 %{base_url} 扩展得很好,所以它不是无效的(只是 GUI 会抱怨)。此外,除非硬编码完整的 base URL(这是不允许的),否则无法创建完全有效的链接。

占位符的总体目的是使软件健壮,其中包括避免硬编码。如果我更改 Discourse 安装的域名、主机名或路径(base_url 的任何元素),那么我将不得不编辑所有我硬编码模板的地方。这是糟糕的编码实践。

既然我知道 Discourse 开发在其他方面遵循非常健康和健壮的编码实践,我只能假设这是一个疏忽/错误,即 (1) 在验证模板时删除 base_url,但 (2) 实际上仍然解释它是否存在,并且 (3) 没有提供替代方法来构建一个完全有效的 URL 而不诉诸糟糕的编码实践……

此外,这将是一个重大的向后不兼容的更改,我没有看到任何实际的好处,但它会给用户带来大量的手动工作……这更增加了我将其视为错误/疏忽的理由。

(我还看到了 3.x 版本中引入的其他与文本模板相关的错误,这更增加了我将其视为疏忽的理由)

1 个赞

当我测试这个时,我无法保存 %{base_url},所以它没有被使用。

也许这是一个疏忽。我同意这可能会破坏旧网站的现有电子邮件模板。我将把它移回 Bug 类别,让团队有机会决定如何处理它。

正如我最初提到的,我指的是在升级到 3.x 后被错误标记为无效的现有自定义模板,即在 2.x 下编辑过并在升级后仍然存在的包含 %{base_url} 的模板。删除该占位符将无法创建完整的 URL,除非诉诸于硬编码 URL。不删除它,在 3.1.1 下它仍然可以正常展开,这很明显。我重新阅读了第一篇文章,并没有觉得它不清楚。

你也许可以通过直接编辑数据库(或者可能在 Rails 控制台中,如果代码运行的验证不相同)来自己测试。

2 个赞

我最终也明白了。我不会亲自测试,但我相信你是正确的。

2 个赞

这听起来确实像一个 bug。也许本应发生的是 %{url} 应该包含主机名。在 endo 模板中,没有该主机名的 URL 几乎毫无用处(除非有某种 HTML 方法可以全局更改相对基础?)。

该团队本周将参加一个会议,所以他们需要一点时间才能对此发表意见。

1 个赞

我不认为这样做是好的做法,因为这样就无法引用网站根目录了。%{base_url} 有其存在的意义,可以用来构建 URL。总的来说,URL 的模板系统提供 3 个占位符:base、path、full_url,其中最后一个只是为了方便(它是前两者的连接)。

1 个赞

@pfaffman 即使在 3.2.1 版本中,这个问题仍然没有解决。自从我最初报告以来,没有任何改变。能否请您将此问题升级以获得修复?简而言之,几乎所有的模板都应该允许使用 %{base_url},因为 %{url} 只包含基础 URL 之后的部分。

至少,请不要阻止用户使用它(尽管它没有显示在可用密钥列表中)。

@nordize,在此回复的没有人有权修复 bug。

在这种情况下,您有什么建议?我不知道该联系谁,或者是否还有其他方法可以引起相关人员的注意。

1 个赞

为了让您了解最新情况,一名工程师已被指派处理此事。 :+1:

有人能帮忙提供一个 Rails 对象名或 Rails 控制台命令来强制在模板中使用 %{base_url} 吗?我知道它肯定能接受并展开它(只是 GUI 说它无效)。

您好,@nordize

您能否提供更多信息,例如您尝试更新的模板的屏幕截图和密钥。我的实例在使用 base_url 时没有问题,但问题可能与特定模板有关。

您可以在此处看到一个示例,说明它应该存在:Help with Rails console to edit text template

还有很多其他的(例如,大多数电子邮件模板)。

每个电子邮件模板(如果不是每个文本模板!)都应该允许使用 %{base_url},因为它是您应该能够从任何地方引用的根网站。我不明白为什么选择性地从某些模板中删除它……除非这有什么疏忽之处。

2 个赞

好的。我会看看。 :+1:

我几乎可以肯定这不是故意的。

1 个赞