我在localhost:3000上运行了一个rails应用程序。我希望从同一网络上的另一台计算机访问它。我觉得我以前很轻松地做过这件事,但这给了我一些悲伤。我可以ping通电脑的IP就好了,但是在浏览器中点击ip:3000是行不通的。我也尝试启动rails s -b ipaddress
,但没有运气。
建议?
答案 0 :(得分:155)
确保服务器端防火墙对高端口上的传入连接打开(通常为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
答案 1 :(得分:21)
rails server -b 0.0.0.0 -p 8000
这对我有用。没有防火墙问题,也没有必要授予超级用户权限。
答案 2 :(得分:5)
是的,这是一个很好的答案一般:
rails server -b 0.0.0.0
如果您使用 Ubuntu ,则可能需要在防火墙中打开端口:
sudo ufw allow 3000
如果您的系统在 VirtualBox 中运行,则必须检查网络设置。
如果是网络模式NAT
,您必须点击扩展选项,然后点击端口转发。添加TCP协议1,主机端口3000(或任何其他)和访客端口3000的规则。
答案 3 :(得分: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/en-US/windows7/Open-a-port-in-Windows-Firewall中提供的步骤进行操作。
答案 4 :(得分:2)
尝试在端口80上运行服务器,防火墙可能阻止端口3000。
答案 5 :(得分: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