在 Discourse 移动版上开发

我在 Ubuntu 机器上运行了一个 Discourse 本地开发环境。我通过遵循本地安装指南成功运行了主要的开发版本。鉴于 ember-cli 的新增功能,我也运行了它,并将其代理到 Rails 应用。我能够完全与桌面版应用进行交互。

但是,当我使用 Chrome 的开发者工具查看移动版时,却无法正常工作。我只看到一个空白页面,响应是“200 OK”,但没有任何内容。它完全是空白的。

我可以通过 Rails 日志看到它正在渲染 某些东西,但它似乎没有通过 Ember 进行代理。

Started GET "/" for <redacted> at 2022-01-31 22:51:03 +0000
   Rendering layout layouts/application.html.erb
   Rendering categories/index.html.erb within layouts/application
   Rendered categories/index.html.erb within layouts/application (Duration: 2.8ms | Allocations: 925)
   Rendered layouts/_head.html.erb (Duration: 1.6ms | Allocations: 273)
   Rendered common/_discourse_stylesheet.html.erb (Duration: 3.2ms | Allocations: 609)
   Rendered layouts/_head_tag.html.erb (Duration: 0.2ms | Allocations: 65)
   Rendered application/_header.html.erb (Duration: 2.5ms | Allocations: 824)
   Rendered layouts/_body_tag.html.erb (Duration: 0.1ms | Allocations: 21)
   Rendered layout layouts/application.html.erb (Duration: 22.6ms | Allocations: 4961)

ember-cli 没有记录关于此请求的任何信息。

我想我可能配置错误,导致错误在某个地方被抛出,但我似乎找不到在哪里或如何显示错误。是否有任何额外的标志或环境变量可以设置,以便围绕此问题获得更详细的日志记录?我尝试设置 DEBUG=ember-cli:*,正如此处所建议的,但这没有记录关于请求的任何信息。

非常感谢您能在此问题上提供任何帮助!我是 Discourse 的长期用户,感谢您的开发!

2 个赞

浏览器控制台中是否有任何 JavaScript 错误?

1 个赞

遗憾的是,没有。控制台中唯一显示的内容是(红色的):

GET http://localhost:4200/ 200 (OK)

响应非常奇怪地完全为空。

有人知道如何为 Ember CLI 或 Discourse 本身启用更详细的日志记录吗?如果我能看到错误是什么,我大概就能解决问题了。但不知何故,我根本看不到任何错误。有什么想法吗?

在深入研究源代码后,我发现了两个有用的环境变量:

  • PRINT_EXCEPTIONS - 显示所有异常,可能过于冗长而没有价值,但它有帮助
  • RAILS_LOGS_STDOUT - 将所有内容记录到控制台,这正是我上面所寻找的

这些有助于确认 Rails 或我的主题的 SCSS 中没有发生错误。

显然,在 ember 和 Rails 之间卡住了一个 gzip 组件。我不确定它是如何出现的,但当存在 Content-Encoding 标头时,这一特定行会将其复制过去,导致浏览器(和 curl)完全忽略响应正文(可能是因为它不再以 gzip 编码)。

看起来这个问题在 2.9.0.beta1 中已修复,但我运行的是 2.7.13 版本。

在开发环境中删除 gzip 组件解决了我的特定版本的此问题,但看起来将来与 gzip 一起使用应该没问题。不确定为什么桌面版本没有出现相同的问题。

希望这对其他遇到类似问题的人有所帮助。

3 个赞