我有一台运行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
时,我无法从我的主机访问它。
答案 0 :(得分:0)
localhost
指的是本地主机,在Windows的情况下与您的Ubuntu实例不同。
您需要直接连接到您的Ubuntu实例IP,无论是什么。通常,您可以找到ip addr
或ifconfig
。
如果您需要友好的DNS名称,可以将其放入浏览器,xip.io提供一个。
如果您正在使用Vagrant,则可以配置端口转发,以便您仍然可以使用localhost
。如果没有端口转发,您将无法间接连接。
答案 1 :(得分:0)
我的VM的网络适配器连接到NAT。我将端口443,22和80转发到我的VM,并在这些端口上访问我的服务器工作正常。由于我在默认端口4567上运行Ruby WEBrick服务器,我只需将端口4567从我的主机转发到我的VM。
更改后,在我的网络浏览器中输入http://localhost:4567
,从我的Ruby文件中提供内容。