2013-04-19 3 views
4
require 'sinatra' 
require 'rubygems' 

class TestServer < Sinatra::Application 
set :port, 22340 
    get '/' do 
     "Hello World" 
    end 
    run! if app_file == $0 
end 

매우 간단한 응용 프로그램과시나 후 1.4.2시나 다시 시작에 WEBrick 서버 루비 2.0.0-P0와 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 

내가 잘못 될 수있는 것에 대해 도와 줄 수있는 사람이 있습니까?

답변

6

문제는 Sinatra modular style을 올바르게 사용하지 않는 것입니다. sinatra을 필요로하지 않고 Sinatra::Application에서 상속하는 경우 sinatra/base이 필요하고 Sinatra::Base을 상속해야합니다.

무슨 일입니까? 일반 sinatra이 필요하며 차례로 sinatra/main이 필요합니다. 이 파일 adds an at_exit handler that runs the built in server (사용하지 않으면). 그러나 자신의 코드에서 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 
+0

지금은 '시네 트라베이스'입니까? https://rubygems.org/gems/sinatra-base – JGallardo

+0

아주 좋은 설명입니다! 감사 – Akshay