[英]How do I make my ruby on rails app respond to external requests (visible to the public on the internet)?
问题:我的Rails应用程序(在本地计算机上)仅响应从同一台计算机发送到本地主机,127.0.0.1或内部IP地址的请求。 当我尝试使用Internet ip或网络内部或外部的任何其他计算机访问它时,它只是超时。 我在Mac OS 10.9.1,ruby 1.9.3,rails 4.0.0上。
我已经做了很多搜索,但是我发现的问题是人们没有转发其端口或绑定正确的IP。
这是我调查过的领域:
端口 -我尝试了几种不同的端口。 我将路由器配置为转发尝试的每个端口,但结果相同。 我以为路由器可能有问题,所以我用Java构建了一个简单的服务器,并绑定了与Rails应用程序绑定的所有相同端口。 果然,当我使用Internet ip访问Java应用程序时,它运行良好,因此路由器/防火墙/端口转发不是问题。 另外,我在端口80上运行了一个apache服务器,它从来没有任何问题。 我关闭了apache,并尝试将80端口用于我的rails应用程序,但这不能解决问题。
Rails Server-我从WEBrick开始,我认为内部可能存在某些设置阻止了外部请求。 我在Google上进行了广泛搜索,但没有发现任何问题。 为了安全起见,我安装了Thin,并获得了与WEBrick完全相同的结果。 一件有趣的事是,当启动rails服务器时,外部请求需要很长时间才能超时,但是服务器控制台根本不显示任何输出。 但是,如果我尝试发送相同的请求而没有启动服务器,它将立即失败。
用户权限 -我是用root 用户启动服务器的(这里我开始只是在黑暗中拍摄),它没有任何作用。
环境 -我最初是在开发环境中开始的,因为我正在开发,但出于娱乐目的,我尝试从生产中开始,这也没有任何区别。
请帮助我聪明的人
更新:我在Ubuntu机器上安装了该应用程序,它没有这个问题! 因此,这表明问题可能与Mac OS有关。
解决:事实证明,在Mac OS中的“系统偏好设置”->“安全性和隐私”->“防火墙”中,已将其设置为阻止与Ruby 1.9.3的传入连接。 我一定是在一段时间前不小心设置了。
问题是您可能正在尝试从本地计算机(或本地网络中任何位于防火墙后的计算机)向公共IP请求页面,以期获得结果……除非您为此设置通过防火墙的路由(并且通常在消费级路由器上不可用... linksys,dlink等)
因此,如果您使用的是pow之类的端口,则将端口80转发给本地计算机,将web Bricks的默认端口转发为3000。
然后让您本地局域网外的某人请求您的外部(公共)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服务器,例如unicorn ,这可能会有所帮助。 将“ gem unicorn-rails"
添加到您的Gemfile中,运行bundle install
,然后(根据他们的文档), rails server
将直接使用unicorn。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.