升级到 3.1.1 版本(从 2.8.x)后,我所有使用 %{base_url}%{url} 来包含主题链接的旧模板现在都被标记为无效,GUI 显示 以下插值键无效:base_url
但实际上它是有效的,因为如果我删除它只留下 %{url},链接就会断开(只包含路径,不包含域名),如果我包含它,链接就是完整有效的。
升级到 3.1.1 版本(从 2.8.x)后,我所有使用 %{base_url}%{url} 来包含主题链接的旧模板现在都被标记为无效,GUI 显示 以下插值键无效:base_url
但实际上它是有效的,因为如果我删除它只留下 %{url},链接就会断开(只包含路径,不包含域名),如果我包含它,链接就是完整有效的。
这可能与旧版本的 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}
但它确实有效,即 %{base_url} 扩展得很好,所以它不是无效的(只是 GUI 会抱怨)。此外,除非硬编码完整的 base URL(这是不允许的),否则无法创建完全有效的链接。
占位符的总体目的是使软件健壮,其中包括避免硬编码。如果我更改 Discourse 安装的域名、主机名或路径(base_url 的任何元素),那么我将不得不编辑所有我硬编码模板的地方。这是糟糕的编码实践。
既然我知道 Discourse 开发在其他方面遵循非常健康和健壮的编码实践,我只能假设这是一个疏忽/错误,即 (1) 在验证模板时删除 base_url,但 (2) 实际上仍然解释它是否存在,并且 (3) 没有提供替代方法来构建一个完全有效的 URL 而不诉诸糟糕的编码实践……
此外,这将是一个重大的向后不兼容的更改,我没有看到任何实际的好处,但它会给用户带来大量的手动工作……这更增加了我将其视为错误/疏忽的理由。
(我还看到了 3.x 版本中引入的其他与文本模板相关的错误,这更增加了我将其视为疏忽的理由)
当我测试这个时,我无法保存 %{base_url},所以它没有被使用。
也许这是一个疏忽。我同意这可能会破坏旧网站的现有电子邮件模板。我将把它移回 Bug 类别,让团队有机会决定如何处理它。
正如我最初提到的,我指的是在升级到 3.x 后被错误标记为无效的现有自定义模板,即在 2.x 下编辑过并在升级后仍然存在的包含 %{base_url} 的模板。删除该占位符将无法创建完整的 URL,除非诉诸于硬编码 URL。不删除它,在 3.1.1 下它仍然可以正常展开,这很明显。我重新阅读了第一篇文章,并没有觉得它不清楚。
你也许可以通过直接编辑数据库(或者可能在 Rails 控制台中,如果代码运行的验证不相同)来自己测试。
我最终也明白了。我不会亲自测试,但我相信你是正确的。
这听起来确实像一个 bug。也许本应发生的是 %{url} 应该包含主机名。在 endo 模板中,没有该主机名的 URL 几乎毫无用处(除非有某种 HTML 方法可以全局更改相对基础?)。
该团队本周将参加一个会议,所以他们需要一点时间才能对此发表意见。
我不认为这样做是好的做法,因为这样就无法引用网站根目录了。%{base_url} 有其存在的意义,可以用来构建 URL。总的来说,URL 的模板系统提供 3 个占位符:base、path、full_url,其中最后一个只是为了方便(它是前两者的连接)。
@pfaffman 即使在 3.2.1 版本中,这个问题仍然没有解决。自从我最初报告以来,没有任何改变。能否请您将此问题升级以获得修复?简而言之,几乎所有的模板都应该允许使用 %{base_url},因为 %{url} 只包含基础 URL 之后的部分。
至少,请不要阻止用户使用它(尽管它没有显示在可用密钥列表中)。
嘿 @nordize,在此回复的没有人有权修复 bug。
在这种情况下,您有什么建议?我不知道该联系谁,或者是否还有其他方法可以引起相关人员的注意。
为了让您了解最新情况,一名工程师已被指派处理此事。 ![]()
有人能帮忙提供一个 Rails 对象名或 Rails 控制台命令来强制在模板中使用 %{base_url} 吗?我知道它肯定能接受并展开它(只是 GUI 说它无效)。
您好,@nordize!
您能否提供更多信息,例如您尝试更新的模板的屏幕截图和密钥。我的实例在使用 base_url 时没有问题,但问题可能与特定模板有关。
您可以在此处看到一个示例,说明它应该存在:Help with Rails console to edit text template
还有很多其他的(例如,大多数电子邮件模板)。
每个电子邮件模板(如果不是每个文本模板!)都应该允许使用 %{base_url},因为它是您应该能够从任何地方引用的根网站。我不明白为什么选择性地从某些模板中删除它……除非这有什么疏忽之处。
好的。我会看看。 ![]()
我几乎可以肯定这不是故意的。