Ruby Sinatra应用程序未启动内部Web服务器

Ruby Sinatra应用程序未启动内部Web服务器,ruby,sinatra,Ruby,Sinatra,我有一个非常简单的Sinatra应用程序要测试 ubuntu@ip:~/helloworld$ cat app.rb # app.rb require 'sinatra' class HelloWorldApp < Sinatra::Base get '/' do "Hello, world!" end end ubuntu@:~/helloworld$ cat config.ru # config.ru require './app' run HelloWorldApp

我有一个非常简单的Sinatra应用程序要测试

ubuntu@ip:~/helloworld$ cat app.rb
# app.rb
require 'sinatra'

class HelloWorldApp < Sinatra::Base
  get '/' do
    "Hello, world!"
  end
end
ubuntu@:~/helloworld$ cat config.ru
# config.ru
require './app'
run HelloWorldApp
还是这样

$ ruby app.rb
[2016-03-18 22:28:00] INFO  WEBrick 1.3.1
[2016-03-18 22:28:00] INFO  ruby 2.2.3 (2015-08-18) [x86_64-linux]
== Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from WEBrick
[2016-03-18 22:28:00] INFO  WEBrick::HTTPServer#start: pid=18087 port=4567
就像在Mac电脑上一样,当我启动应用程序时,它是这样运行的

$ ruby app.rb
== Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop

它正在本地主机上侦听。我的Ubuntu有什么问题,它不能启动内部Web服务器。有故障排除说明吗?

我想这里有一些问题

首先,瘦对韦德里克。Rack和Sinatra都将在启动时尝试找到合适的Web服务器。他们会寻找Thin,但如果它不可用,他们都会转而使用Webrick。解决方案是使用
gem install Thin
在Ubuntu服务器上安装Thin。您可能希望研究如何使用和添加
thin
gem,以确保在开发和生产中始终使用相同的gem

第二,从另一台机器访问服务器。默认情况下,在开发模式下启动时,两个和将只侦听
localhost
。要绑定到
0.0.0.0
,您需要明确指定主机(使用
-o
选项到
rackup
或使用
设置:为Sinatra内置服务器绑定“0.0.0.0”
),或从中启动

还有一件事–在当前设置中,运行
ruby app.rb
实际上不会启动应用程序。它将运行默认的
Sinatra::Application
(在本例中为空),而不是您的
HelloWorldApp
,因为您正在使用。要使其按预期运行,您应该将require行更改为

require 'sinatra/base'

HelloWorldApp.run! if app_file == $0

你的意思是为什么它在Mac上使用Thin而在Ubuntu上使用Webrick?是的,它在Mac上使用Thin,在特定的主机和端口上侦听。但对于webrick,它无法侦听特定的主机/端口。它正在启动,请参阅行
[2016-03-18 22:23:58]信息webrick::HTTPServer#启动:pid=18049 port=9292
。当你在Ubuntu上运行时,你是否试图从另一台机器上访问服务器?是的,我试图从同一台机器上访问它,也尝试从另一台机器上访问它。我不能。我想在0.0.0.0和端口8080上运行它。
HelloWorldApp.run! if app_file == $0