Ruby Sinatra网络服务在本地主机上的端口4567上运行,但不能在IP上运行。

37
我有一个运行在 Windows 7 32位操作系统上的ruby(使用sinatra)Web服务,它运行在4567端口。 当我使用localhost: 4567时,它可以正常工作。但是,当我将localhost替换为我的机器的本地IP地址,如192.168.103.99:4567时,它无法工作并且连接失败。 我已经禁用了防火墙,绕过代理并将端口4567添加到异常列表中,但仍然没有成功。可能出了什么问题?

请检查本地主机是否绑定到 IPV4 本地主机 127.0.0.1 而不是 IPV6 本地主机。另外,您正在使用哪个 Web 服务器?Mongrel、Thin、Webrick 还是 Passenger? - mcfinnigan
如何检查?它是WEBrick 1.3.1。 - foobar
2
ping localhost,查看解析出的IP地址。要将Webrick绑定到特定的IP,请参阅此文档:http://smyck.net/2007/03/11/how-to-bind-webrick-to-any-ip-address/ - mcfinnigan
哦,也许这就是问题所在,我应该将它绑定到IPv4吗? - foobar
2
这里有一个曾经帮助过我的链接 - ss_everywhere
显示剩余4条评论
4个回答

59
以下方法适用于我:
在终端中输入以下命令: ruby app.rb -o 0.0.0.0

26

当使用内置服务器通过run! if app_file == $0检查时,Sinatra文档解释说需要set :bind, '0.0.0.0'才能使接口在localhost层之外可用。

不需要使用自定义IP地址或反向DNS(mydomain.com...):'0.0.0.0'Sinatra期望的合法值,将被正确地解释。

因此,一个最小化的、自包含的Sinatra应用程序,在所有接口上都可用,而不仅仅是localhost,将是:

require 'sinatra/base'

class MyApp < Sinatra::Base
  set :bind, '0.0.0.0'

  get '/' do
    'Hello World'
  end

  run! if app_file == $0
end

11

要设置服务器主机名或IP地址,请使用Sinatra设置 bind,例如:

set :bind, '192.168.103.99'

1
这个。
require 'rubygems'
require 'sinatra'
require "dbi"

set :bind, '192.168.200.185'
get '/' do
    'hello word'
end

这个可以运行,但需要一些解释来回答。 - FilBot3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接