【问题标题】:Access webrick/rails from another computer on local network从本地网络上的另一台计算机访问 webrick/rails
【发布时间】:2011-11-11 15:28:09
【问题描述】:

我有一个在 localhost:3000 上运行的 Rails 应用程序。我希望从同一网络上的另一台计算机访问它。我觉得我以前很轻松地做到了这一点,但这让我有些悲伤。我可以很好地 ping 计算机的 IP,但是在浏览器中点击 ip:3000 不起作用。我也尝试启动rails s -b ipaddress,但没有成功。

建议?

【问题讨论】:

  • 您有防火墙阻止此访问吗?
  • 很难说,因为它在我的工作网络上,而不是在家里。运行它的计算机连接到 192.168.100 子网。我的第二台电脑是 wifi 上的笔记本电脑,同一个子网。
  • 尝试在端口 80 而不是 3000 上运行它
  • 是的,可以。现在工作:)。如果您愿意,请发布您的答案,我会接受,
  • 我遇到了同样的问题,虽然我已经在端口 80 (-p 80) 上运行 rails,但我仍然无法从同一网络上的其他计算机访问它。我仍然可以从其他计算机访问其他应用程序,例如 SVN 和 UberSVN Web 界面,但不能访问 ruby​​。有什么帮助吗?

标签: ruby-on-rails webrick


【解决方案1】:

确保您的服务器端防火墙对高端口上的传入连接开放(这通常是正确的,默认端口是 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

【讨论】:

  • 选择的答案对我没有帮助,因为防火墙已经被禁用,但是,这个答案。
  • 不禁用防火墙“rails server -b 0.0.0.0”对我不起作用。首先,我必须使用:“sudo ufw disable”禁用防火墙,然后使用:“rails server -b 0.0.0.0”运行服务器
  • @AfzalMasood,听起来您已将 ufw 预先配置为默认拒绝所有。这是一个好习惯!只需在您的规则中允许端口 3000 就可以了。 :)
  • @OneHoopyFrood 可能是,但我从未更改与防火墙相关的任何内容或默认拒绝所有内容。
  • 如果你没有rvmsudo,如果你想使用端口80,你可以简单地使用sudo rails server -b 0.0.0.0 -p 80(或者只是sudo rails s,如果你编辑boot.rb)。
【解决方案2】:
rails server -b 0.0.0.0 -p 8000

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

【讨论】:

    【解决方案3】:
    1. 是的,这是一个很好的答案总的来说

      rails server -b 0.0.0.0
      
    2. 如果您使用Ubuntu,您可能需要在防火墙中打开端口:

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

      在网络模式NAT 的情况下,您必须点击扩展选项,然后点击端口转发。为 TCP 协议、主机端口 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/en-US/windows7/Open-a-port-in-Windows-Firewall 提供的步骤进行操作。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我这样做了,但仍然无法从同一台机器或同一网络中的另一台机器访问 myip:80
        • OneHoopyFrood 答案很完美
        • OneHoopyFrood 的答案应该是选中的。这个答案是相当空洞的
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          一个原因是您的 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-09-15
            • 2018-01-04
            • 2012-05-22
            • 2023-03-13
            • 2011-03-30
            • 1970-01-01
            • 2014-03-20
            相关资源
            最近更新 更多