`rails server`使用Puma和域名指向127.0.0.1

时间:2016-01-25 19:09:28

标签: ruby-on-rails dns subdomain puma

我有一个使用子域的Rails应用程序(遗留应用程序,我一直想要改变它,还没有)。我将我的应用程序部署到Heroku,我开始测试Puma,因为它是Heroku的推荐选择,也是即将发布的Rails中的默认选项。当我使用WEBrick(本地)时,我能够使用指向127.0.0.1的DNS记录测试我的子域名,例如vcap.me,特别是http://vcap.me:3000/指向我的应用程序,http://abcde.vcap.me:3000/将正确设置subdomian到"abcde"

只需将gem 'puma'添加到我的Gemfile和runnning bundle,就会导致rails server启动 Puma 。除了测试域都不起作用外:http://localhost:3000/有效,但不是http://vcap.me:3000/http://lvh.me:3000/

Chrome只是说: “此网页无法使用 ERR_CONNECTION_REFUSED“

火狐: “无法连接 Firefox无法在vcap.me:3000建立与服务器的连接。 ......“

我没有找到原因/解决方案,但我怀疑它与Puma支持的非HTTP TCP请求有关,除了正确的知道,我只是通过浏览器尝试HTTP请求。

只是为了好奇,如果你还没有听说过vcap.me和类似的域名,它只是一个指向localhost的DNS记录:

$ dig vcap.me
...
vcap.me.        3048    IN  A   127.0.0.1
...

$ dig a.vcap.me
...
a.vcap.me.      3600    IN  A   127.0.0.1
...

2 个答案:

答案 0 :(得分:0)

我感到惭愧,@ maxd发布了一个非常相似的问题的解决方案:https://stackoverflow.com/a/28745407/637094并且它有效。我仍然不明白为什么我需要绑定到vcap.me而且在我使用WEBrick之前我没有。

rails server -p 3000 -b vcap.me

我将问题保持开放,所以也许有人可以扩展,我们都可以更好地了解正在发生的事情

答案 1 :(得分:0)

这是issue #782在2016年7月18日here解决的Puma服务器中。

您使用vcap.me之类的域不是问题。该域由DNS服务器解析为127.0.0.1。问题是,在解决之前,Puma在某些系统上默认情况下仅绑定到localhost的IPv6分辨率,即::1。由于vcap.me不提供IPv6分辨率,因此您无法通过调用http://vcap.me:3000/来到达Puma。

您发现rails server -p 3000 -b vcap.me解决了该问题,是因为它等效于rails server -p 3000 -b 127.0.0.1。之后,服务器的地址与vcap.me的仅IPv4名称解析相匹配。

无论如何,这是过去的问题。现在默认情况下,Puma绑定到localhost的IPv4和IPv6分辨率。