我是一名 Android 开发人员,我的应用程序经常需要服务器端代码。我通常使用 Ruby on Rails 编写 Web 应用程序,在开发过程中,我会使用 WEBrick 在本地计算机 (Mac OS X) 上运行服务器。早上到办公室时,我会在控制台中运行 ifconfig 以查看我的笔记本电脑当天分配了哪个 IP。在向相关 Web 应用程序发出请求时,我会在我的 Android 应用程序中使用该 IP。
当我在办公室时,一切都运行正常。
回到家后,我尝试做同样的事情,通过 ifconfig 找到我的笔记本电脑的 IP,将其设置在应用程序的配置文件中,但始终找不到目的地。为了将我的应用程序排除在障碍之外,我尝试访问 Web 服务器 IP(例如,http://192.168.1.4:3000),但无法连接。如果我尝试从运行 Web 服务器的笔记本电脑上进行连接,则一切正常。如果我从同一网络上的另一台机器上进行连接,同样无法连接。
鉴于此,我认为我已经将问题缩小到我家庭网络中的某种配置,但坦率地说,我不知道原因可能是什么。我家里没有什么特别的东西,你基本的 Verizon FiOS 路由器/调制解调器,所有东西都通过 Wi-Fi 连接(工作时手机和笔记本电脑也使用 Wi-Fi,仅供参考)。我尝试禁用 Verizon 路由器上的防火墙,启用端口转发,以及我可以对端口 3000 执行的几乎所有其他操作,但什么都没有改变。
亲爱的 Server Fault 天才们,请帮助一位可怜的开发人员。:)
编辑:
一些后续事项需要添加。我的 Mac 防火墙未启用,所有传入请求均被允许。我还在手机和笔记本电脑上验证了它们位于同一网络上(192.168.1.4 Mac,192.168.1.9 手机)。我有不不知道为什么这不起作用。
编辑2:
我进入“系统偏好设置”,启用了“Web 共享”,并尝试通过手机查看网站,但无法连接。所以这不是 WEBrick 或与 Rails 有关的问题。我机器上的防火墙已关闭,路由器上的防火墙也已关闭。
编辑3:
有一些进展。我为笔记本电脑设置了端口 3000 的端口转发,找到了外部 IP,然后使用它,连接正常。所以,我的内部网络肯定有些设置不正确。
答案1
您是否尝试过像这样运行 WEBrick rails s -p 80 来强制使用端口 80。如果您的路由器有问题,尝试其他端口可能会有所帮助。
我建议直接插入电脑并从直接插入的电脑访问它。您的路由器可能是那些有两个网络的奇怪路由器之一;主无线网络和访客无线网络。即使您的所有设备都连接到同一个物理路由器,您也处于彼此分离的不同网络上。我会检查笔记本电脑上的无线设置,确保不是这种情况。
答案2
某些路由器具有禁用无线客户端之间通信的选项。检查路由器的无线设置,看看是否启用了此选项。它可能被称为“隔离”模式或类似名称。如果您可以提供路由器的实际制造商/型号,则可能可以查阅文档并帮助查看路由器上是否有这样的选项。
如果你的手机和笔记本电脑两个都有192.168.1.4
作为他们的 IP 地址(如你所述),那么他们不是在同一个网络上(或严重配置错误而无法访问互联网)。
答案3
我知道在某些 Windows 7 机器上,您有不同的网络(公共、家庭、工作)。您可能在家中将机器连接为公共网络,这可能导致它不显示网站。但是在您的办公室,连接设置为工作或家庭,从而打开了 Webrick。我会尝试禁用您与家庭的连接并忘记该连接。尝试建立一个新的连接并将其设置为家庭。
在网络下,根据您当前选择的网络位置,单击家庭网络、工作网络或公共网络链接。(见下面的屏幕截图)
答案4
您必须运行 WebBrick 并选择绑定到 IP 0.0.0.0 才能允许来自任何地方的连接。否则它只会绑定到 127.0.0.1 并只接受来自本地主机的连接。
rails server -b 0.0.0.0
rails server --help
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost
来源:Rails 开发人员