我们的 Discourse 图片未启用灯箱效果

我同意,能否请 @falco 在下周修改 launcher,使其对此发出警告或直接阻止?

我也遇到了同样的问题,你能具体说明需要将 .yml 文件重命名为什么吗?

你需要在 yml 文件名中包含顶级域名(TLD)和子域名吗?对于这个站点,文件名会是 meta.discourse.org.yml 吗?

将其重命名为 meta_discourse_org.yml

文件名中唯一的 . 应位于扩展名之前。

谢谢澄清。我修改了文件名并重新构建,但仍然看不到任何灯箱效果,也无法通过悬停显示任何图片的说明文字。

这是哪个日志文件?我想确认这是否是同一个问题。

此外,我还启用了“强制您的网站仅使用 HTTPS”,并且在防火墙上封锁了 80 端口。

cd /var/discourse
./launcher enter app
tail -f /shared/log/rails/production.log

另请参阅这篇关于 Discourse 日志的文章。

如果仅现有帖子出现问题,而新发布的图片正常,那么运行以下命令对我有帮助:

rake uploads:recover_from_tombstone
rake posts:rebake

也请查看此处。

所有这些都很有用,谢谢。

看起来我遇到了同样的错误:can't reach '/uploads/default...

我的日志文件的下一行是
Started GET "/posts/950" for 127.0.0.1 at 2020-07-07 08:24:05 +0000

有没有人知道为什么我的请求是通过回环 IP 发起的,而不是通过新命名的容器或容器的本地 IP?

这似乎仅针对同时满足以下条件的非标准安装:

  • 未使用 ./discourse-setup 而是手动创建了 yml 文件

  • 使用了反向代理

  • 该反向代理通过 Docker 容器名称进行了“魔法”配置

我建议不要为了处理这种边缘情况而更改所有人的当前确定性容器名称,除非仅通过在 yml 文件名中添加一个额外的点就能引发此问题。

我确实使用了它,但后来重命名了该文件,因为我运行了两个 Discourse 实例,否则在同一个 Docker 实例中它们都会被称为 app。
我认为根据所使用的域名重新启用该文件名称是合理的。

对于在单台服务器上运行多个站点的小型社区来说,这应该相当常见。

导致名称问题的并非反向代理,而是 Docker 本身,因为它会自动将容器名称添加到其内部 DNS 中。问题在于,Docker 中的 Discourse 容器名称与其外部 DNS 名称相同(例如 app.ymlmeta.discourse.org.yml)。

我建议,如果文件名与 .yml 文件中提供的域名匹配,至少显示一个强烈的警告。

我仍然遇到无法访问图片以获取尺寸的问题。

无法访问 ‘/uploads/default/original/1X/9385b0977b09b0f2239c287de980b6fc238d0da0.png’ 以获取其尺寸。

这是在使用 ./discourse-setup 进行完全标准安装时出现的问题。

还有其他修复建议吗?

如果您尝试在 Discourse 应用中下载图片会发生什么?

./launcher enter app
wget https://yourdomain.com/uploads/default/original/1X/9385b0977b09b0f2239c287de980b6fc238d0da0.png

域名解析是否指向了正确的 IP 地址?

apt-get update
apt-get install inetutils-ping
ping yourdiscoursedomain.com

或者

apt-get update
apt-get install dnsutils
nslookup yourdiscoursedomain.com

再次感谢你的帮助,Michael,这真的非常感激。

我可以成功 ping 通该域名,但看起来 wget 正尝试通过网页代理。

我已经按照 这篇 指南操作,并在所有相关位置添加了 no-proxy 变量。

我是不是漏掉了什么?如何配置容器以不使用服务器正在使用的网页代理?我是否需要在 app.yml 中添加 no-proxy 设置?

我已在 app.yml 文件中将域名添加到 no-proxy 参数,并重新构建,现在已按要求忽略代理。

但在应用内部执行 wget 时仍会报错:

警告:‘MYDOMAIN.com’的证书不受信任。
警告:‘MYDOMAIN.com’的证书没有已知的颁发者。

这是因为我的 SSL 证书来自内部 CA。当我使用 --no-check-certificate 标志运行相同的 wget 命令时,可以正常工作。

我该如何添加该证书以使其受信任,或者添加标志以跳过证书检查?

@Michael_Uray 你知道我需要在哪里添加根 CA,以便 Discourse 容器信任 SSL 证书吗?

我已经按照这篇指南操作,但我觉得该指南适用于服务器本身,而不是运行 Discourse 的容器。

如果你不使用反向代理,你肯定需要进入容器内部并在那里添加它,但我认为这样设置不会持久。我猜你需要通过 app.yml 以某种方式将其添加到 app.yml 中,或者通过 app.yml 使容器内相应的 CA 路径持久化。