这是正确的吗?安装开发版本需要多长时间?

我正在尝试在 DigitalOcean 的 Ubuntu 20.04 实例上安装 Discourse 开发版本,唯一目的是将 FluxBB 论坛迁移到 Discourse,导出后再导入到 Discourse 的生产版本中。

我之前安装 Docker 生产版本进行测试时一切顺利(未涉及从 FluxBB 迁移)。

然而,当我按照以下指南尝试安装 Discourse 开发版本时:

我发现运行以下命令时,它永远无法完成:

bundle exec rake autospec

在等待大约 30 分钟后,我的远程会话超时了。

此外,我还遇到了大量错误,遗憾的是我现在手头没有这些错误信息,但它们都属于某种函数总是返回 “nil” 的类型。

由于我不知道该命令的作用,也不确定它是否必要(指南只是说“尝试运行 specs”,并未说明其作用或原因),于是我直接尝试了下一个命令:

bundle exec rails server --binding=0.0.0.0

结果发现这个命令也耗时极长,并在终端输出了大量我不理解的内容,可能是错误,也可能不是。

因此我的问题是:这是预期行为,还是我哪里做错了?这些命令通常需要多长时间才能完成?

另外,是否可以直接使用生产版/Docker 版的 Discourse 来迁移 FluxBB 论坛,而无需使用开发版本?目前我还没有生产站点,所以不用担心破坏它,我可以随时将其销毁并重新创建。

1 个赞

这意味着服务器正在运行。当然,除非你按下 Control+C 或关闭终端,否则它会一直运行。

除非你停止服务器,否则信息会无限期地打印到终端。

运行几秒后,网页即可在你的浏览器中访问。

你在浏览器中连接的是正确的端口吗?通常是 3000。

1 个赞

关于在生产服务器上运行导入操作,已有多个操作指南。你可以参考其中一篇,作为运行所需脚本的指引。

听起来你已安装了开发环境,因此建议在该环境中运行此脚本。

1 个赞

浏览器中没有任何显示。如果我在终端运行 top,会看到一个 Ruby 进程正在运行。

如果运行以下命令后,终端输出会一直持续下去,永不停止:

bundle exec rails server --binding=0.0.0.0

这是否应该在文档中明确说明?通常,当我阅读操作指南时,我期望某个命令执行后会有所完成,并显示安装已完成、可以开始使用的提示信息。

1 个赞

有几个关于在生产服务器上运行导入的教程主题。

这些内容可能在哪里?我唯一看到的针对 FluxBB 的教程明确说明要在开发环境中进行:

我想这属于常识:如果你启动了一个 Web 服务器,除非管理员有意停止,否则它不应停止。Web 服务器通常旨在日复一日地提供页面服务……当然,有人可以添加这一说明。任何人都可以通过拉取请求(PR)提交对指南的改进建议。

1 个赞

但认为该命令会启动一个 Web 服务器是常识吗?它只显示“rails server”,这未必指 Web 服务器。当你启动 Apache Web 服务器时,会立即返回到命令提示符,而不会在终端中无休止地输出内容……

Rails 是一个 Web 应用程序框架。我认为直接将它与 Apache 进行比较并不公平。

我恰好喜欢能看到它忙碌工作的这一点。当它停止时,通常意味着出了问题!在某些情况下,输出信息非常有用,尤其是在开发环境中。你可以通过环境配置来调整显示的信息量。

顺便一提,根据文档,Rails 可以通过 -d 参数实现“守护进程化”。你可以自行探究为什么在默认安装中该功能似乎无法正常工作,可能是该功能引入了某些限制。关于这一点,最好直接咨询开发团队。

1 个赞

@epsteindidnt

当你逐渐熟悉 Rails 开发后,如果你和我一样,你会发现你所说的“在终端里无休止地输出各种信息”实际上会成为你最好的朋友之一。

例如,我目前正为一个客户开发一个 Rails 应用程序,我们将他们几十年前的所有遗留业务逻辑迁移到 Rails。我甚至为此特意买了一台新显示器,只为能看清那些“终端里无休止输出的信息”(用你的话来说),因为对开发者而言,这些信息就像闪闪发光的黄金。

除了提供详尽细节、展示系统运行情况的 Rails 服务器日志外,还有另一个“开发者的最佳伙伴”,那就是 Rails 控制台!

当我为 Rails 编写代码时,我基本上先在 VS Code 中写好草稿,然后复制粘贴代码片段到 Rails 控制台中,以确保一切按预期运行。

在调试时,我会在代码中写入 Ruby 的打印语句(如 pputs),然后观察屏幕上那“源源不断的 Rails 服务器日志黄金信息流”。我几乎所有的错误都是通过这种方式修复的!正如我所说,我最近还特意买了一台全新的独立曲面游戏显示器,专门用来查看那些让你感到厌烦的 Rails 服务器日志信息 :slight_smile:

从你的帖子来看,我觉得你有点像今年年初的我,在没有 Rails 开发经验的情况下开始迁移到一个 Rails 应用程序。起初,我也对 Rails 感到有些(甚至更多)厌烦;但九个月后的今天,我每天都在为客户 exclusively 进行 Rails 开发(由于我半退休状态,客户工作限制为一半时间),并且已经停止了之前所有的 PHP 开发工作。说实话,我现在对 Rails(以及 Ruby)充满了全新的热情。俗话说,迟做总比不做好!

关于 Apache2,Apache 并不像 Rails 那样提供应用程序幕后运行的详尽细节。我在所有 Rails 应用程序前面运行 Apache2 作为反向代理,老实说,我已经记不清上次查看 Apache 日志文件是什么时候了;因为我所有的调试工作都是通过你目前感到厌烦的 Rails 服务器日志完成的 :slight_smile:

最后,我真诚地希望,一位曾经“将论坛迁移到 Rails"的人提供的不同视角,能在某种程度上有所帮助。对我而言,被迫从 LAMP 网络应用转向 Rails 网络应用,是我在 2020 年个人经历过的最棒的“技术事件”之一。

节日快乐!

1 个赞

我最近也对此感到有点不安。这是我今天发现的:

rails s 终端中的输出会在启动时显示大量查询,但随后它还包括 discourse 的 sidekiq 作业的输出(至少在 docker 开发设置中是这样)。因此,如果您正在进行大量导入,那么您将获得一个非常大的 sidekiq 队列的后期处理作业,这些作业可能会长时间运行。我认为这些是非必需的作业,例如加载缓存,它们似乎不会阻止您在完成之前浏览网站。

这让我非常困惑,因为我进行了大量导入,然后退出了并重新初始化了数据库以进行一次小型测试导入,但它仍在无休止地进行与不再存在的巨大数据库相关的查询!解决方案是使用 rails 控制台清空 sidekiq 队列

现在可能帮不了您,但我想分享一下。