2012-09-24 18 views
7

Mam bardzo podstawową aplikację testową. Kiedy wykonuję to polecenie, serwer ignoruje określony przeze mnie port i uruchamia cienki port 4567. Dlaczego wskazany port jest ignorowany?Jak zrobić Cienki uruchomić na innym porcie?

$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 

plik 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! 

plik config.ru

require 'sinatra' 
require 'sinatra/base' 

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

SingingRain.run! 

Odpowiedz

14

Twój problem jest z linią:

SingingRain.run! 

To Sinatry run method, który mówi Sinatrę, aby uruchomić własny serwer WWW, który działa na porcie 4567 domyślnie. To jest w twoim pliku config.ru, ale config.ru to tylko Ruby, więc ta linia jest uruchamiana tak, jakby była w jakimkolwiek innym pliku .rb. Oto dlaczego Sinatra uruchamia się na tym porcie.

Po zatrzymaniu tego serwera za pomocą CTRL-C, Thin spróbuje kontynuować ładowanie pliku config.ru, aby określić, która aplikacja ma zostać uruchomiona. Nie właściwie określić aplikację w swojej config.ru, więc można zobaczyć coś takiego:

^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>' 
     ... 

Ten błąd jest po prostu informacją, że nie właściwie określić aplikację do uruchomienia w pliku konfiguracyjnym.

Zamiast SingingRain.run! użyj:

run SingingRain 

run to metoda Rack, który określa, które aplikacja do uruchomienia. Możesz także zrobić run SingingRain.new - Sinatra podejmie kroki, aby umożliwić ci użycie samej klasy tutaj lub instancji.

Wyjście to powinno być teraz tylko:

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

Nie dostaniesz wiadomość == Sinatra/1.3.2 has taken the stage on 4567 for production with backup from Thin ponieważ Sinatra nie działa wbudowany serwer, to tylko twój serwer Cienki jak go ustawił.

+0

Czasami trudno jest uzyskać dobre odpowiedzi, takie jak twoje. Dziękuję światu :) – Roman

+0

Twoja odpowiedź zadziałała, ale mam jeszcze jedno pytanie.Teraz, gdy uruchomię polecenie '$ ruby ​​thinx.rb start -d', otrzymuję dwa wyjścia' exit', mimo że serwer uruchamia się poprawnie. Czy wiesz o co chodzi? – Roman

+0

@ Arman przepraszam, nie wiem co się dzieje z twoimi dwoma wyjściami - to się nie zdarza dla mnie. – matt

-3

w config.ru dodać

zestaw: port => 8000

Sugeruję również użycie Sinatry z czymś podobnym do pasażera + nginx, co sprawia, że ​​wdrożenie do produkcji jest proste. Ale nie musisz się tym martwić, jeśli zamierzasz wdrożyć do Heroku.

+0

Nie Cienki: konstruktor Runner specjalnie analizowania argumentów wiersza poleceń jako udokumentowane tutaj? https://github.com/macournoyer/thin/blob/master/lib/thin/runner.rb – Roman

+0

wygląda na to, ale nie jestem pewien, jak to działa, kiedy używasz pliku config.ru. Jeśli nie utworzyłeś pliku config.ru i po prostu .rb thin akceptuje parametr -p – djd

16
#\ -p 8000 

umieścić to na górze config.ru

+0

To zadziałało dla mnie za pomocą sinatra/shotgun/webrick – scaraveos

+0

excellent. Dzięki – kakubei

+0

To działało dla Sinatra/Thin, uruchamiając polecenie "rackup". Idealny! – chrisallick

Powiązane problemy