如何让我的ruby on rails app响应外部请求(互联网上的公众可见)?

问题:我的rails应用程序(在我的本地计算机上)仅响应从同一台计算机发送到localhost,127.0.0.1或我的内部IP地址的请求。 当我尝试使用我的互联网IP或任何其他机器,在我的网络内部或外部,它只是超时。 我使用的是Mac OS 10.9.1,ruby 1.9.3,rails 4.0.0。

我已经做了很多搜索,但我能找到的只是人们没有转发端口或绑定正确的ip的问题。

以下是我调查的领域:

端口 – 我尝试了几个不同的端口。 我配置我的路由器转发我尝试的每个端口但得到相同的结果。 我想也许路由器有问题,所以我用Java构建了一个简单的服务器,绑定了我用rails应用程序绑定的所有相同端口。 果然,当我使用我的互联网IP点击Java应用程序时它工作得很好,所以路由器/防火墙/端口转发不是问题。 此外,我在端口80上运行一个apache服务器,从来没有遇到任何问题。 我关闭了apache并为我的rails应用尝试了端口80,但这并没有解决问题。

Rails服务器 – 我开始使用WEBrick,我认为可能有一些设置阻止了外部请求。 我广泛搜索谷歌,并没有发现任何事情。 为了安全起见,我安装了Thin,并得到了与WEBrick完全相同的结果。 有趣的是,当rails服务器启动时,外部请求需要很长时间才能超时,但服务器控制台根本不显示任何输出。 但是,如果我尝试发送相同的请求w / out启动服务器,它会立即失败。

用户权限 – 我用root启动服务器(我开始只是在黑暗中拍摄)并且它没有任何效果。

环境 – 我最初是在开发环境中开始的,因为我正在开发,但只是为了好玩,我尝试从生产开始,它也没有任何区别。

请帮助我的聪明人

更新:我在我的Ubuntu机器上安装了应用程序,它没有这个问题! 这表明问题可能与Mac OS有关。

已解决:事实certificate,在Mac OS中的系统偏好设置 – >安全和隐私 – >防火墙中,它以某种方式设置为阻止与Ruby 1.9.3的传入连接。 我不得不在前一段时间意外地设定。

问题是您可能尝试从本地计算机(或本地网络上,防火墙后面的任何计算机)请求页面到您的公共IP期望结果…除非您为此通过防火墙设置路由(并且在消费级路由器上通常不可用… linksys,dlink等)

因此,如果您使用像pow这样的东西,则转发端口80;对于网络砖,默认端口为本地计算机

然后让当地局域网以外的人请求您的外部(公共)IP

这可能是相关的: 在VirtualBox上的Ubuntu 11.10上的Rails 3.1非常慢

你提到的缓慢与webrick的使用让我觉得你有一些反向DNS查询可怕性。 快速的第一步是黑客/ etc / hosts绕过此查找。

我在Ubuntu上处理的情况在短期内通过黑客/ etc / hosts解决了。 您可以快速进行此操作,以查看它是否确实只是webrick的反向DNS查找。 编辑/ etc / hosts并为外部用户的IP地址添加一行,如下所示:

156.123.48.55 TestPerson 

用测试仪的IP地址替换IP地址。 既然您说过可以通过端口80获取外部请求来访问Apache服务器,那么您可以在必要时从Apache访问日志中获取其IP地址,否则只需要求测试人员。

您也可以尝试使用其他Web服务器,例如独角兽 ,这可能有所帮助。 在您的Gemfile中添加“gem unicorn-rails" ,运行bundle install ,然后(根据他们的文档), rails server将直接使用unicorn。

使用任何本地服务器,您都需要在防火墙上正确配置端口转发。 就像CaptChrisD所说的那样,测试必须由外部IP /浏览器完成(如果您拥有服务器,请使用ssh ,然后使用w3m进行测试)。

我已经有相同的症状(服务器启动=>超时,服务器停止=>失败),原因是防火墙配置问题。 我认为这是你的问题。

使用MacOS, Pow真的很棒:安装很简单,无需配置(没有/etc/hosts ……)。 此外,它们为您提供了一个用于外部访问虚拟主机的挂钩(但您仍需要在防火墙上进行端口转发)。

否则,还有其他解决方案,如转发 ,没有防火墙配置(30天免费试用)。

希望这可以帮助!