Ruby on rails 如何让我的ruby on rails应用程序响应外部请求(在互联网上对公众可见)?

Ruby on rails 如何让我的ruby on rails应用程序响应外部请求(在互联网上对公众可见)?,ruby-on-rails,ruby,networking,external,public,Ruby On Rails,Ruby,Networking,External,Public,问题: 我的rails应用程序(在我的本地计算机上)只响应从同一台计算机发送到本地主机127.0.0.1或我的内部ip地址的请求。当我尝试使用我的互联网ip或从任何其他机器(在我的网络内外)点击它时,它只是超时。我使用的是Mac OS 10.9.1、ruby 1.9.3、rails 4.0.0 我做了很多搜索,但我能找到的只是人们没有转发他们的端口或绑定正确的ip的问题 以下是我调查过的领域: 端口- 我试过几个不同的端口。我将路由器配置为转发我尝试的每个端口,但得到了相同的结果。我认为路由器可

问题: 我的rails应用程序(在我的本地计算机上)只响应从同一台计算机发送到本地主机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服务器启动时,外部请求需要很长时间才能超时,但服务器控制台根本不显示任何输出。但是,如果我尝试发送相同的请求,同时启动服务器,它会立即失败

用户权限- 我用root启动了服务器(我现在开始在黑暗中拍摄),但没有效果

环境- 我最初是在开发环境中开始的,因为我正在开发,但只是为了好玩,我尝试在生产环境中开始,这也没有什么不同

请帮助我这些聪明人

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

已解决:
事实证明,在Mac OS的系统首选项->安全和隐私->防火墙中,它以某种方式设置为阻止进入Ruby 1.9.3的连接。我一定是前一段时间无意中设置的。

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

所以,如果您正在使用pow之类的端口,请将端口80转发到本地机器,或将web bricks默认端口转发到3000

然后让本地lan以外的人请求您的外部(公共)IP

这可能与:

你提到的缓慢加上webrick的使用让我觉得你有一些反向DNS查找的麻烦。快速的第一步是破解/etc/hosts以绕过此查找

我在Ubuntu上处理的情况通过hack/etc/hosts在短期内得到了解决。你可以做这个快速黑客,看看它是否真的只是webrick的反向DNS查找。编辑/etc/hosts并为外部用户的IP地址添加一行,如下所示:

156.123.48.55 TestPerson
用测试仪的IP地址替换IP地址。因为您说过可以获取外部请求来访问端口80上的Apache服务器,所以如果需要,您可以从Apache访问日志中获取其IP地址,否则只需询问测试人员即可


您还可以尝试其他web服务器,例如,这可能会有所帮助。将“gem
unicorn rails”
添加到您的gem文件中,运行
bundle install
,然后(根据他们的文档),
rails服务器将直接使用unicorn。

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

我已经有了相同的症状(服务器启动=>超时,服务器停止=>失败),并且来源是防火墙配置问题。我想这是你的问题

有了MacOS,这真是太棒了:安装很简单,不需要配置(无需
/etc/hosts
…)。此外,它们为您提供了一个钩子(但您仍然需要在防火墙上进行端口转发)

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


希望这有帮助

你需要一个永久的解决方案吗?你想用它做什么?是的,一个永久的解决方案会更好。我正在开发一些服务,而其他人正在开发客户端,从任何地方都可以看到它肯定很方便。即使不可能,我也希望了解请求被删除/忽略的位置。很高兴您解决了问题!感谢分享您的解决方案。想法不错,但这不是问题所在。我可以通过使用公共ip从本地网络访问apache服务器。另外,为了确保这一点,我的一个朋友请求了rails页面(他正在开发客户端),他得到了相同的结果。正如我提到的,我已经尝试了Thin,但还是继续尝试了Unicorn,但没有成功。hosts文件技巧对我也没有任何帮助,但是谢谢你建议了一些我还没有尝试过的东西。该死,听起来和我之前的版本非常相似。对不起,我帮不上忙:(