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 浏览器时都会被拒绝连接的主要内容,如果未能解决你的问题,请参考以下文章
无法打开到 localhost:9200 的 TCP 连接 - Rails on Docker compose
Rails 服务器正在运行,但无法连接到 localhost:3000