Rails 应用程序在 localhost 上运行,但每当我检查 Web 浏览器时都会被拒绝连接

Posted

技术标签:

【中文标题】Rails 应用程序在 localhost 上运行,但每当我检查 Web 浏览器时都会被拒绝连接【英文标题】:Rails app running on locahost, but I get connection refused whenever I check the web browser 【发布时间】:2022-01-20 20:16:08 【问题描述】:

我有一个 Rails 应用程序,我已经在端口 3000 上运行了数周没有任何事故,但我突然被拒绝连接。

当我启动 rails 服务器时,我会在控制台上得到以下输出:

=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.2-p107) ("Zawgyi")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 717
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000

在我运行 JMeter 以了解负载测试后,我的问题就开始了(我能够运行 2 个测试,但后来它坏了)。我的 rails 应用程序在 Windows 10 (wsl 2) 的 linux 子系统上运行,我使用的是 Apache JMeter 5.4.2。

我还测试了一个 NodeJs 应用程序,尝试使用其他端口(例如 8080),但仍然被拒绝连接。

我向 http://localhost:3000/ 发出了 curl 请求,它工作得很好,任何网络浏览器上的相同 url 仍然让我连接被拒绝。

【问题讨论】:

您的浏览器是否自动将“s”附加到 http?这是一个很好的起点。确保您使用 http 访问 localhost,除非您的 rails 应用程序强制执行 https 不,它没有。如果我在浏览器中输入 localhost 的完整 url,即使服务器显然在控制台上运行,我仍然会被拒绝连接。如果我尝试访问根路径,控制台上没有输出。我不知道发生了什么。 【参考方案1】:

看起来问题与 WSL 有关

检查底层Linux distribution logs 查看与网络/WSL 相关的Windows logs

一般来说,不建议在同一物理(或虚拟)机器上运行 JMeter(或任何其他工具),因为当 JMeter 和您的被测应用程序将努力争取操作系统资源时,您可能会遇到race condition,因此结果将不是很可靠,因为很难说瓶颈到底在哪里。当然,您可以使用 JMeter PerfMon plugin 来检查每个进程的资源使用情况,但它也可能无法讲述完整的故事。

另一个潜在问题是load testing in scaled-down environments may be an issue itself,您应该在类似生产的环境中运行性能测试。如果您有 4 GB 的 RAM 并且看到应用程序可以处理 1000 个用户,这并不意味着使用 8 GB 的 RAM 可以处理 2000 个用户,指标和 KPI 不能像这样推断。

最后但最不重要的是,您正在“开发”模式下运行您的应用程序,我建议您在 "production" mode instead 中执行它

【讨论】:

【参考方案2】:

我找出了问题所在并修复了它。事实证明,如果我在 windows 上运行 node js 应用程序,它工作得很好,所以所有迹象都表明问题实际上出在 wsl2 上。

我找到了一篇很有帮助的文章https://appuals.com/localhost-refused-to-connect/,它指导了我,我需要做的就是重新启动 LxssManager。

代表提问者发帖

【讨论】:

以上是关于Rails 应用程序在 localhost 上运行,但每当我检查 Web 浏览器时都会被拒绝连接的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6,React,Rack-Cors [重复]

在本地运行 React/Rails 应用程序

无法打开到 localhost:9200 的 TCP 连接 - Rails on Docker compose

Rails 服务器正在运行,但无法连接到 localhost:3000

如何同时在 localhost 和 web 上运行 Ruby 项目?

Pusher 未在 Heroku Rails 应用程序上触发,但在 localhost:3000 上工作正常