无法从主机访问VM上的Ruby服务器

时间:2015-03-09 22:04:33

标签: ruby sinatra virtual-machine

我有一台运行Ubuntu服务器14.04的虚拟机。在我的VM中,我创建了以下Ruby / Sinatra应用程序:

require 'sinatra'

set :environment, :production
set :bind, '0.0.0.0'

get '/' do
  "Hello World!"
end

当我使用ruby hello.rb执行此操作时,我得到以下输出:

[2015-03-09 16:58:34] INFO  WEBrick 1.3.1
[2015-03-09 16:58:34] INFO  ruby 2.1.5 (2014-11-13) [x86_64-linux]
== Sinatra/1.4.5 has taken the stage on 4567 for production with backup from WEBrick
[2015-03-09 16:58:34] INFO  WEBrick::HTTPServer#start: pid=2258 port=4567

一切似乎都运行良好,但当我尝试从我的主机(Windows 8.1)访问localhost:4567时,我收到GET http://localhost:4567/ net::ERR_CONNECTION_REFUSED错误(在Chrome中)。

如果我尝试从我的VM中访问服务器(例如,使用wget http://localhost:4567),它可以正常工作。

我也在我的VM中运行了Apache2.4,它工作正常,但是在尝试通过运行sudo service apache2 stop来访问我的Ruby服务器时禁用了它。

问题是什么?我没有运行常规Ruby文件的问题,如果我将Apache2与Phusion Passenger一起使用,我可以访问我的Ruby / Sinatra应用程序。但是,当我只是运行ruby hello.rb时,我无法从我的主机访问它。

2 个答案:

答案 0 :(得分:0)

localhost指的是本地主机,在Windows的情况下与您的Ubuntu实例不同。

您需要直接连接到您的Ubuntu实例IP,无论是什么。通常,您可以找到ip addrifconfig

如果您需要友好的DNS名称,可以将其放入浏览器,xip.io提供一个。

如果您正在使用Vagrant,则可以配置端口转发,以便您仍然可以使用localhost。如果没有端口转发,您将无法间接连接。

答案 1 :(得分:0)

我的VM的网络适配器连接到NAT。我将端口443,22和80转发到我的VM,并在这些端口上访问我的服务器工作正常。由于我在默认端口4567上运行Ruby WEBrick服务器,我只需将端口4567从我的主机转发到我的VM。

更改后,在我的网络浏览器中输入http://localhost:4567,从我的Ruby文件中提供内容。