Discourse 设置假设已安装 netcat

我终于成功搭建了我的第一个 Discourse 实例,尽管过程中遇到了一些困难。我运行的是 Debian Stretch,并遵循了 Docker 安装指南

这个问题之前也曾出现过,但 netcat discourse-setup 无法找到它。

该检查仅发出警告,您可以选择忽略,因此我不认为这是一个错误。

我曾考虑让 discourse-setup 自动安装 nc,但让 discourse-setup 安装可能永远用不到的东西似乎并非明智之举。

如果 nc 缺失,或许应该跳过测试,并建议用户若需要该测试则自行安装 nc,甚至可以提示运行 apt install nc

我不得不 respectfully 表示异议,这看起来确实像是一个 bug。是的,你确实打印了一条可以忽略的警告信息,但对于首次安装 Discourse 的用户来说,我们希望尽可能简化安装过程,这意味着用户无需深入源码去发现需要安装 netcat 才能避免错误。任何错误都会让用户或系统管理员感到困惑,导致他们花费时间去排查问题,甚至通过 git blame 去指责编写该代码的人。:stuck_out_tongue:

这个问题可以通过在 IP 检查之前添加一个简单的检查来轻松规避,具体如下:

  1. 检查 netcat 是否已安装
  2. 如果已安装,则继续执行
  3. 如果未安装,则打印一条警告信息,并提供一个“是/否”选项,让用户选择跳过此检查继续安装,或者中止安装以便他们自行安装 netcat(甚至可以提供通过 apt/yum/pacman 自动安装的功能)。

另一种适用于更多系统(尽管并非所有系统)的方案是使用 /dev/tcp 协议栈。有关具体实现方法的更多信息,请参阅 此处。此方法在 Debian 上已验证有效,在 Ubuntu 上也能正常工作,我尚未在其他发行版上进行测试。

@pfaffman 我初步尝试了一下,并为此创建了一个 拉取请求:tada: