2012-09-24 66 views
7

我有一個非常基本的測試應用程序。當我執行此命令時,服務器忽略我指定的端口並在端口4567上運行Thin。爲什麼我指定的端口被忽略?如何在不同的端口上進行精簡運行?

$ruby xxx.rb start -p 8000 

== Sinatra/1.3.3 has taken the stage on 4567 for production with backup from Thin 
>> Thin web server (v1.4.1 codename Chromeo) 
>> Maximum connections set to 1024 
>> Listening on 0.0.0.0:4567, CTRL+C to stop 

xxx.rb文件

require 'Thin' 

rackup_file = "config.ru" 

argv = ARGV 
argv << ["-R", rackup_file ] unless ARGV.include?("-R") 
argv << ["-e", "production"] unless ARGV.include?("-e") 

puts argv.flatten 

Thin::Runner.new(argv.flatten).run! 

config.ru文件

require 'sinatra' 
require 'sinatra/base' 

class SingingRain < Sinatra::Base 
    get '/' do 
     return 'hello' 
    end 
end 

SingingRain.run! 

回答

14

你的問題是與線:

SingingRain.run! 

這是Sinatra的run method,它告訴辛納屈,開始其默認端口4567上運行自己的網絡服務器。這是在您的config.ru文件中,但config.ru只是Ruby,因此該行運行時就好像它在任何其他.rb文件中一樣。這就是爲什麼你看到Sinatra在那個港口啓動。

當您使用CTRL-C停止此服務器時,Thin會嘗試繼續加載config.ru文件以確定要運行的應用程序。你不會真的在你的config.ru指定的應用程序,所以你會看到類似這樣的:

^C>> Stopping ... 

== Sinatra has ended his set (crowd applauds) 
/Users/matt/.rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/builder.rb:129:in `to_app': missing run or map statement (RuntimeError) 
     from config.ru:1:in `<main>' 
     ... 

這個錯誤是簡單地告訴你,你實際上並沒有指定一個應用程序在你的配置文件中運行。

代替SingingRain.run!,使用:

run SingingRain 

run是機架方法,用於指定要運行的應用程序。您也可以這樣做run SingingRain.new - Sinatra採取措施讓您只在這裏使用類本身,或一個實例。

輸出到這個現在應該僅僅是:

>> Thin web server (v1.4.1 codename Chromeo) 
>> Maximum connections set to 1024 
>> Listening on 0.0.0.0:8000, CTRL+C to stop 

因爲西納特拉沒有運行其內置的服務器時,沒有得到== Sinatra/1.3.2 has taken the stage on 4567 for production with backup from Thin消息,它只是你,你將其配置瘦服務器。

+0

有時候很難得到像你這樣的好答案。謝謝你的世界:) – Roman

+0

你的答案適合我,但我有另一個問題。現在,當我運行'$ ruby​​ thinx.rb start -d'命令時,即使服務器正常啓動,我也會得到兩個'exit'輸出。你知道那是什麼嗎? – Roman

+0

@阿曼抱歉,我不知道你的兩個輸出會發生什麼 - 它不會發生在我身上。 – matt

-3
在config.ru

添加

集:口=> 8000

另外,我會強烈建議使用Sinatra,像乘客+ nginx這使部署到生產輕而易舉。但是如果您要部署到heroku,則不必擔心這一點。

+0

不薄的頂部:亞軍構造特別解析命令行參數記錄在這裏? https://github.com/macournoyer/thin/blob/master/lib/thin/runner.rb – Roman

+0

看起來像它,但我不知道如何當你使用config.ru文件的工作。如果你還沒有創建一個config.ru文件,它只是.rb瘦確實接受-p參數 – djd

16
#\ -p 8000 

把這個在config.ru

+0

這對我使用sinatra/shotgun/webrick – scaraveos

+0

優秀。謝謝 – kakubei

+0

這通過運行命令「rackup」爲Sinatra/Thin工作。完善! – chrisallick

相關問題