我有一个非常简单的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的问题是它无法启动内部网络服务器。任何故障排除说明?
答案 0 :(得分:2)
我认为这里有几件事情。
首先,瘦与Webrick。 Rack和Sinatra都会尝试在启动时找到合适的网络服务器。他们会寻找Thin,但如果没有,他们都会回归使用Webrick。解决方案是使用X.method();
在您的Ubuntu服务器上安装Thin。您可能希望使用Bundler并添加gem install thin
gem来确保在开发和生产中始终拥有相同的宝石。
其次,从另一台机器访问服务器。默认情况下,在开发模式下启动时,rackup
和Sinatra’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
到文件的末尾。