从本地网络上的另一台计算机访问webrick / rails


73

我有一个运行在localhost:3000上的Rails应用程序。我希望从同一网络上的另一台计算机访问它。我觉得我以前很轻松地做到了,但这让我有些悲伤。我可以ping通计算机的IP,但在浏览器中打ip:3000无效。我也尝试发射rails s -b ipaddress,没有运气。

有什么建议吗?


您是否有防火墙阻止此访问?
布莱恩(Brian)

很难说,因为它在我的工作网络上,而不是在家中。运行它的计算机已连接到192.168.100子网。我的第二台计算机是同一子网内wifi上的笔记本电脑。
agmcleod 2011年

2
尝试在端口80上运行它,而不是3000
VNO

是的,那样就可以了。现在可以使用:)。如果你愿意,发表您的答案,我必须接受,
agmcleod

我遇到了同样的问题,尽管我已经在端口80(-p 80)上运行了rails,但仍然无法从同一网络上的其他计算机访问它。我仍然可以从其他计算机访问其他应用程序,例如SVN和UberSVN Web界面,但无法访问ruby。有什么帮助吗?
XpiritO 2012年

Answers:


1

请尝试在端口80上运行服务器,因为防火墙可能阻止了端口3000。


3
我这样做了,但仍然无法从同一台计算机或同一网络中的另一台计算机访问myip:80
marimaf 2012年

1
OneHoopyFrood答案是完美的-Omer
Aslam,

4
OneHoopyFrood的答案应该是选中的答案。这个答案有点令人望而却步
Jereme Causing Caesing

186

确保服务器端防火墙对高端口上的传入连接开放(通常为true,默认端口为3000,因此您可能无需执行任何操作)之后,还必须像这样启动服务器:

rails server -b 0.0.0.0

将其绑定到通用地址。localhost默认情况下绑定到。

使用此方法,您不必绑定到端口80,但是您可以这样:

rails server -b 0.0.0.0 -p 80

(如果您使用的是rvm,则可能需要使用rvmsudo


要使此更改更永久,请编辑config/boot.rb并添加以下内容:

require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge(Host:  '0.0.0.0', Port: 3000)
    end
  end
end

那你只需要使用 rails s

资料来源:https : //stackoverflow.com/a/29562898/1795429


5
选择的答案对我没有帮助,因为防火墙已被禁用,但是,这个确实可以。
日本,2015年

如果不禁用防火墙,“ rails server -b 0.0.0.0”对我不起作用。首先,我必须使用以下命令禁用防火墙:“ sudo ufw disable”,然后使用以下命令运行服务器:“ rails server -b 0.0.0.0”
Afzal Masood

1
@AfzalMasood,听起来像您已将ufw预配置为默认拒绝所有。这是一个好习惯!只需在您的规则中允许端口3000,它就可以正常运行。:)
OneHoopyFrood

@OneHoopyFrood可能是,但是我从未更改过与防火墙相关的任何内容,也没有通过反义词拒绝所有内容。
阿夫扎尔·马苏德

1
如果你没有rvmsudo,你可以简单地使用sudo rails server -b 0.0.0.0 -p 80 (或只是sudo rails s如果你编辑boot.rb)如果你想使用端口80
山姆Soffes

28
rails server -b 0.0.0.0 -p 8000

这对我有用。没有防火墙问题,也不需要授予超级用户权限。


8
  1. 是的,总体而言,这是一个很好的答案:

    rails server -b 0.0.0.0
    
  2. 如果使用Ubuntu,则可能必须打开防火墙中的端口:

    sudo ufw allow 3000
    
  3. 如果您的系统在VirtualBox中运行,则必须检查网络设置

    在网络模式下,NAT您必须单击扩展选项,然后单击端口转发。为TCP协议1,主机端口3000(或任何其他端口)和访客端口3000添加规则。


4

假设Webrick启动没有问题,这是100%的防火墙问题。您应该提供一些规范,例如主机正在运行的操作系统以及就控制防火墙而言是否具有管理员特权。

如果您在Linux上并运行iptables防火墙服务,则需要添加一条规则以接受通过端口3000的通信。它看起来像:

iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

但是,该命令将是一次性的解决方案,您需要扩展当前的iptables规则脚本,以使其在每次系统引导或登录时永久存在。

如果您运行的是Windows,则取决于您运行的是XP还是Vista / 7,您需要执行类似的操作。我假设您处于Vista / 7环境中,您只需要按照本指南中提供的步骤进行操作即可:http://windows.microsoft.com/zh-CN/windows7/Open-a-port在Windows防火墙中


1

我正在使用领班来管理基于Procfile的应用程序。

在Procfile中添加-b 0.0.0.0我的bundle exec rails s命令对我有用。


0

原因之一是您的IP未绑定到Rails服务器。您可以使用-b命令选项绑定ip。

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.