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

时间:2016-03-18 22:28:38

标签: 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

当我在Ubuntu上启动时,它会像这样运行。它没有启动听众。 或者是网络服务器

$ rackup
[2016-03-18 22:23:58] INFO  WEBrick 1.3.1
[2016-03-18 22:23:58] INFO  ruby 2.2.3 (2015-08-18) [x86_64-linux]
[2016-03-18 22:23:58] INFO  WEBrick::HTTPServer#start: pid=18049 port=9292

或者这样

$ 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

正在侦听Localhost。我的Ubuntu的问题是它无法启动内部网络服务器。任何故障排除说明?

1 个答案:

答案 0 :(得分:2)

我认为这里有几件事情。

首先,瘦与Webrick。 Rack和Sinatra都会尝试在启动时找到合适的网络服务器。他们会寻找Thin,但如果没有,他们都会回归使用Webrick。解决方案是使用X.method();在您的Ubuntu服务器上安装Thin。您可能希望使用Bundler并添加gem install thin gem来确保在开发和生产中始终拥有相同的宝石。

其次,从另一台机器访问服务器。默认情况下,在开发模式下启动时,rackupSinatra’s built in server都只会收听thin。要绑定到localhost,您需要明确指定主机(使用0.0.0.0的{​​{1}}选项,或者使用内置服务器内置的Sinatra的-o,或者启动在production mode using the RACK_ENV environment variable

另外一件事 - 在当前运行rackup的设置中,实际上不会启动您的应用程序。它将运行默认set :bind '0.0.0.0'(在这种情况下为空)而不是ruby app.rb,因为您使用的是modular style。要使其按预期运行,您应将需求行更改为

Sinatra::Application

并添加

HelloWorldApp

到文件的末尾。