jjh*_*s57 4 ruby webrick sinatra
require 'sinatra'
require 'rubygems'
class TestServer < Sinatra::Application
set :port, 22340
get '/' do
"Hello World"
end
run! if app_file == $0
end
Run Code Online (Sandbox Code Playgroud)
Ruby 2.0.0-p0和Sinatra 1.4.2的非常简单的应用程序
当我按ctrl-c时webrick服务器在默认端口上重新启动...请参阅下面的输出
LM-BOS-00715009:server joshughes$ ruby test.rb
[2013-04-19 16:07:48] INFO WEBrick 1.3.1
[2013-04-19 16:07:48] INFO ruby 2.0.0 (2013-02-24) [x86_64-darwin11.4.2]
== Sinatra/1.4.2 has taken the stage on 22340 for development with backup from WEBrick
[2013-04-19 16:07:48] INFO WEBrick::HTTPServer#start: pid=63798 port=22340
^C
== Sinatra has ended his set (crowd applauds)
[2013-04-19 16:07:56] INFO going to shutdown ...
[2013-04-19 16:07:56] INFO WEBrick::HTTPServer#start done.
[2013-04-19 16:07:56] INFO WEBrick 1.3.1
[2013-04-19 16:07:56] INFO ruby 2.0.0 (2013-02-24) [x86_64-darwin11.4.2]
== Sinatra/1.4.2 has taken the stage on 4567 for development with backup from WEBrick
[2013-04-19 16:07:56] INFO WEBrick::HTTPServer#start: pid=63798 port=4567
^C
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这里可能出现的问题吗?
问题是你没有正确使用Sinatra模块化风格.而不是要求sinatra和继承Sinatra::Application你应该要求sinatra/base和继承Sinatra::Base.
这是怎么回事.你需要简单sinatra,这反过来要求sinatra/main.此文件添加了一个at_exit运行内置服务器的处理程序(除非您禁用它).但是,您也明确调用run!自己的代码,因此服务器因您的调用而启动,然后当您退出时,at_exit处理程序再次启动服务器.要求sinatra/base不会在退出时启动内置服务器,因此您只能拥有自己的显式调用run!.
require 'sinatra/base' # change here
require 'rubygems'
class TestServer < Sinatra::Base # and here
set :port, 22340
get '/' do
"Hello World"
end
run! if app_file == $0
end
Run Code Online (Sandbox Code Playgroud)