我有一个使用子域的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
...
答案 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分辨率。