2012-10-23 16 views
12

Desidero distribuire un semplice servizio Ruby Rack con NGINX. Ho letto varie cose su internet, nessuna delle quali era abbastanza utile. Diciamo che ho questo (in realtà è un po 'più complesso, ma ancora < 200 righe di codice di servizio):Come distribuire l'app Ruby Rack con NGINX

require 'rack' 

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

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

mi piacerebbe sapere quale sarebbe il modo migliore per distribuire questo con Nginx. Forse FCGI o qualcos'altro?

risposta

15

ecco un config nginx di base per il caso in cui si sta andando con unicorn/thin soluzione:

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; 
    } 
} 

se si esegue nginx come root Potrai può servire il vostro sito sulla porta 80.

altrimenti cambiare listen 80-listen SOME-AVAILABLE-PORT

sostituire domain.tld con il nome del sito

inoltre è possibile aggiungere le estensioni di file che devono essere serviti da nginx nel (jpg|jpeg|gif|png|css|js) regex, li delimitano da |

See more at:

http://wiki.nginx.org/DirectiveIndex

http://wiki.nginx.org/ServerBlockExample

http://wiki.nginx.org/FullExample

9

La cosa più semplice è probabilmente passenger che consente a nginx di servire (tra le altre cose) qualsiasi app basata su rack. È abbastanza facile da configurare, ma dal momento che nginx non ha moduli caricabili devi installare nginx dal sorgente (il programma di installazione gestisce tutto questo per te).

Un altro modo popolare è quello di avere un proxy nginx su unicorno. Unicorn è un server web rubino in grado di ospitare qualsiasi app rack. Normalmente si consente a nginx di gestire le risorse statiche e di inviare il resto all'unicorno. L'unicorno ha alcune caratteristiche interessanti rispetto al sottile, bastardo ecc., Ad esempio, gestisce i riavvii senza soluzione di continuità praticamente fuori dalla scatola.

1

La distribuzione di nginx + passenger è piuttosto semplice quando si utilizzano binari passeggeri precompilati (for Debian/Ubuntu). E 'importante avere seguente struttura di directory del progetto:

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

nginx config (probabilmente per esempio in /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;  
} 

Quando si vuole riavviare l'applicazione, è sufficiente eseguire

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

Per abilitare il tuo sito su Debian, crea un symlik

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

e ricaricare nginx /etc/init.d/nginx reload

+0

Come faccio a disattivare il server predefinito da utilizzare "my_site"? – Vikaton

+0

Basta rimuovere il file di configurazione: 'rm/etc/nginx/sites-enabled/my_site' e ricaricare nginx:'/etc/init.d/nginx/reload'. – Tombart

+0

Quello che rimuove quello che voglio usare, voglio rimuovere la configurazione DEFAULT – Vikaton

Problemi correlati