Discourse 使用双 nginx 错误:找不到从 `discourse-common/lib/raw-handlebars` 导入的模块 `handlebars`

您好!
我的网站使用的是 discourse 2.9 版本。由于某些原因,我不得不使用双 nginx 来运行 discourse。我部署了两个 discourse web_only 容器节点,并在它们前面放置了一个 nginx 进行代理。我的系统架构图:

当我使用自定义 nginx 代理两个 web_only 容器节点并随机分发请求到任何一个 web_only 节点时,我的 discourse 网站有时会报告错误:找不到模块 ‘handlebars’,它从 ‘discurse-common /lib/raw-handlebars’ 导入,此时浏览器访问网站会显示空白屏幕。但是,当我使用自定义 nginx 将所有请求转发到其中一个 web_only 节点时,这个错误就不会发生。我搜索了这个问题,之前有一些提交解决了这个相同的错误,我确认我的版本包含了那些提交的代码。

Could not find module 'handlebars' imported from 'discourse-common/lib/raw-handlebars'

Broken instance after updating to 2.9.0.beta2 - #11 by david

有人知道这是为什么吗?非常感谢!

顺便分享一个双重nginx导致无法获取真实用户IP地址的问题。
这是因为我的自定义nginx启用了X-Forwarded-For头字段来获取客户端IP地址,但没有禁用discourse的nginx的X-Forwarded-For。导致自定义nginx的X-Forwarded-For配置被discourse的nginx覆盖了。

而且无论使用哪一个都无所谓吗?它们运行的是相同的镜像吗?这很令人费解。

在同一主机上运行两个容器的唯一好处是,可以实现零停机升级。既然您不经常升级,那么这似乎是不必要的复杂性。

您需要在您的web_only.yml中添加类似以下内容:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

非常感谢您的回复。

是的,用哪一个都无所谓。它们运行的是相同的 web_only 镜像。我将继续使用安全模式查找问题,如果有任何结论,我将在此处汇报。

抱歉我的系统架构图引起了误解,我使用了另一台机器来部署 web_only。我使用双重 web_only 的原因是,我的 web_only 容器曾经因为连接过多而崩溃,但当时我没有找到原因。所以我尝试使用双重 web_only 来避免再次出现同样的问题。

谢谢,这帮我解决了获取真实用户 IP 的问题。

1 个赞

这说得通。

有一个设置可以增加连接数。

我建议升级。那个版本应该存在一些问题,而且我敢肯定自那以后已经修复了几个安全问题。

1 个赞

谢谢。目前,我在安全模式下进行调试时仍然遇到同样的错误。我准备好升级我的 Discourse,看看是否有效。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.