2012-10-23 8 views
12

Chcę wdrożyć prostą usługę szafy Rubin z NGINX. Czytałem różne rzeczy w Internecie, z których żadna nie była wystarczająco pomocna. Powiedzmy mam to (w rzeczywistości jest to nieco bardziej skomplikowane, ale wciąż < 200 linii kodu usługi):Jak wdrożyć aplikację Ruby Rack za pomocą NGINX

require 'rack' 

class HelloWorld 
    def call(env) 
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]] 
    end 
end 

Rack::Handler::Mongrel.run HelloWorld, Port: 9292 

Chciałbym wiedzieć, co będzie najlepszym sposobem, aby wdrożyć to z nginx. Może FCGI czy coś innego?

Odpowiedz

15

tutaj jest podstawowy config nginx dla przypadku idziesz z unicorn/thin rozwiązanie:

upstream rack_upstream { 
    server 127.0.0.1:9292; 
} 

server { 
    listen  80; 
    server_name domain.tld; 
    charset UTF-8; 

    location/{ 

    proxy_pass http://rack_upstream; 
    proxy_redirect  off; 
    proxy_set_header Host    $host; 
    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ { 
    root /path/to/static/files; 
    } 
} 

jeśli uruchomić nginx jako root będziesz może służyć swoją witrynę na porcie 80.

w przeciwnym razie zmienić listen 80 do listen SOME-AVAILABLE-PORT

zastąpić domain.tld z nazwy witryny

również można dodać rozszerzenia plików mają być obsługiwane przez nginx w (jpg|jpeg|gif|png|css|js) regex, je ograniczających przez |

zobacz więcej na:

http://wiki.nginx.org/DirectiveIndex

http://wiki.nginx.org/ServerBlockExample

http://wiki.nginx.org/FullExample

9

Najprostsza rzecz to prawdopodobnie passenger, która pozwala nginxowi służyć (między innymi) dowolnej aplikacji opartej na stelażu. Konfiguracja jest bardzo łatwa, ale ponieważ nginx nie ma ładowalnych modułów, musisz zainstalować nginx ze źródła (instalator to wszystko obsługuje).

Innym popularnym sposobem jest posiadanie proxy dla jednorożca. Unicorn to ruby ​​serwer WWW, który może obsługiwać dowolną aplikację typu rack. Zazwyczaj pozwalasz nginxowi obsługiwać zasoby statyczne i wysyłać resztę do jednorożca. Jednorożec ma pewne fajne cechy w porównaniu z cienkimi, kundlowymi itp., Na przykład obsługuje płynne restartowanie po wyjęciu z pudełka.

1

Wdrażanie nginx + pasażera jest dość łatwe, gdy używamy prekompilowanych binariów pasażerskich (for Debian/Ubuntu). Ważne jest, aby mieć następującą strukturę katalogów projektu:

/var/www/my_app: 
    \-- public/ <- public root of webserver 
    \-- config.ru <- that's where you place hello world 
    \-- tmp 
     \-- restart.txt 

nginx config (prawdopodobnie na przykład w /etc/nginx/sites-available/my_site):

server { 
    listen 80; 
    server_name example.com; 
    root /var/www/my_app/public; 

    passenger_enabled on; 
    passenger_ruby /usr/bin/ruby;  
} 

Gdy chcesz, aby ponownie uruchomić aplikację, wystarczy uruchomić

touch /var/www/my_app/tmp/restart.txt 

Aby włączyć swoją witrynę w Debianie, stwórz symlikę

ln -s /etc/nginx/sites-available/my_site /etc/nginx/sites-enabled/my_site 

i przeładuj nginx /etc/init.d/nginx reload

+0

Jak wyłączyć domyślny serwer do korzystania z "my_site"? – Vikaton

+0

Wystarczy usunąć plik konfiguracyjny: 'rm/etc/nginx/sites-includes/my_site' i ponownie załadować nginx:'/etc/init.d/nginx/reload'. – Tombart

+0

To jest usunięcie tego, czego chcę użyć, chcę usunąć DEFAULT config – Vikaton

Powiązane problemy