2011-11-15 11 views
13

sto ottenendo il seguente errore nel nginx (con 403), quando ho visitare .it:Rails 3.1, nginx, indice di directory passeggeri vietato

[error] 5384#0: *1 directory index of "/u/apps/<app-name>/current/public/" is forbidden 

Sono su Ubuntu 10.04 e non ci riesco per la vita di me ottengo nginx, Passenger, Rails 3.1 e Capistrano per giocare bene.

Sto distribuendo a/u con Capistrano. Tutto in/u è 755, di proprietà dell'utente dell'app.

/u/apps // corrente/pubblico/ha tutte le mie risorse, la favicon e tutto il resto che ti aspetteresti.

Quando aggiungo autoindex on a nginx.conf ottengo un elenco di pubblico/directory, che mi porta a credere che non abbia un problema di autorizzazione.

Il mio file nginx.conf è predefinito aspetterebbe per:

server { 
    listen 80; 
    server_name <app-name>.com; 
    passenger_enabled on; 
    root /u/apps/<app-name>/current/public/; 
} 

E file di mio Capistrano deploy.rb non ha nulla di insolito.

Qualche idea per cui l'app per rotaie non sembra iniziare?

risposta

27

OK, ho risposto alla mia domanda. Mi mancavano le configurazioni passenger_ruby e passenger_root nel mio file nginx.conf. Nota che il percorso passenger_ruby deve essere il wrapper se stai usando RVM.

passenger_root /usr/local/rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.9; 
passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.2-p290/ruby; 
+1

Bene, se questo ha risolto il tuo problema, vai avanti e accetta la tua risposta. – Nightfirecat

+0

Fatto - grazie per il suggerimento :) – alexlod

+0

Qualche idea sul perché devono essere i wrapper? Non so davvero quali sono le diverse directory in RVM, ma perché non bin invece? –

11

Se si dispone già di passenger_root e passenger_ruby nel vostro nginx.conf, ma avere questo errore, è necessario disporre di alcuni blocchi di localizzazione. Quindi devi specificare passenger_enabled on; all'interno di ciascun blocco di posizione.

+1

Questo è il trucco per me, ho dimenticato di aggiungere il passeggero abilitato alla configurazione dei siti. – Joe

+0

Non è vero nel mio caso. Non ho blocchi di posizione, ma ottengo ancora questo errore. – robguinness

+2

Non ho nemmeno blocchi di posizione, quindi ho aggiunto un 'location/{passenger_enabled on; } ' – adamo

4

Mi spiace rispondere ad una vecchia domanda, ma sembra rilevante (almeno per me ;-)) Ho avuto un problema simile e riesco a risolverlo grazie a questo post ma in modo diverso. In alternativa, è possibile impostare il /etc/nginx/nginx.conf da utilizzare:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; 
passenger_ruby /usr/bin/ruby; 

E poi assicurarsi che il locations.ini è corrente eseguendo:

passenger-config --make-locations-ini 

Come detto, questo ha funzionato per me, anche se non sono un esperto, forse sto giocando con i parametri sbagliati.

5

Nel caso in cui si esegue in questo con passeggeri 5+ e la vostra applicazione Rails è un applicazione 2.3.x, è ora necessario aggiungere un file config.ru per la vostra applicazione:

# Require your environment file to bootstrap Rails 
require ::File.dirname(__FILE__) + '/config/environment' 

# Serve static assets from RAILS_ROOT/public directory 
# use Rails::Rack::Static 
# Dispatch the request 
run ActionController::Dispatcher.new 

Maggiori dettagli nel official announcement e github ticket.

So che la domanda dell'OP riguardava specificamente Rails 3.1 ma volevo includerla qui poiché l'output è identico e le ricerche mi hanno portato a questo post.

+0

Questo risolve il mio problema. Grazie @Matt Sanders –

+0

Impressionante, felice che abbia aiutato! –

+1

Abbiamo trascorso 3 ore in cerca di questo! Molti complimenti. Grazie!! –