2011-11-15 19 views
13

Dostaję następujący błąd w nginx (ze 403), kiedy odwiedzam .comRails 3.1, nginx, indeks katalogu Pasażer zabronione

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

jestem na Ubuntu 10.04 i nie mogę dla życia mnie weźcie nginx, Pasażera, Rails 3.1 i Capistrano, żeby ładnie się bawili.

Wdrażam do/u z Capistrano. Wszystko w/u jest 755, własnością użytkownika aplikacji.

/u/apps // current/public/ma wszystkie moje zasoby, favicon i wszystko inne, czego można się spodziewać.

Kiedy dodaję autoindex on do pliku nginx.conf, otrzymuję listing katalogu publicznego /, co prowadzi mnie do przekonania, że ​​nie mam problemu z uprawnieniami.

Mój plik nginx.conf jest domyślnym spodziewać:

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

I plik mojego Capistrano deploy.rb nie ma nic niezwykłego.

Jakieś pomysły, dlaczego aplikacja rails się nie uruchamia?

Odpowiedz

27

W porządku, odpowiedziałem na własne pytanie. Brakuje w moim pliku nginx.conf konfiguracji osobowych_porów i osobowych_roota. Zauważ, że ścieżka pasażerska powinna być opakowaniem, jeśli używasz 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

Cóż, jeśli to rozwiązało Twój problem, zaakceptuj własną odpowiedź. – Nightfirecat

+0

Zrobione - dziękuję za cynk :) – alexlod

+0

Każdy pomysł, dlaczego to muszą być owijki? Naprawdę nie wiem, co to są różne katalogi w RVM, ale dlaczego nie zamiast tego bin? –

11

Jeśli masz już passenger_root i passenger_ruby w nginx.conf, ale o ten błąd, trzeba mieć pewne bloki lokalizacji. Następnie musisz określić wewnątrz każdego bloku lokalizacji: .

+1

To mi wystarczy, zapomniałem dodać wpisu passenger_enabled do konfiguracji strony. – Joe

+0

Nieprawda w moim przypadku. Nie mam blokad lokalizacji, ale nadal otrzymuję ten błąd. – robguinness

+2

Nie miałem również blokad lokalizacji, więc dodałem opcję 'location/{passenger_enabled on; } ' – adamo

4

Przepraszamy za stare pytanie, ale wydaje się istotne (przynajmniej dla mnie ;-)) Miałem podobny problem i udało mi się go rozwiązać dzięki temu wpisowi, ale w inny sposób. Alternatywnie, można skonfigurować /etc/nginx/nginx.conf używać:

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

A następnie upewnij się, że jest obecny locations.ini uruchamiając:

passenger-config --make-locations-ini 

Jak powiedział, to działało dla mnie, chociaż nie jestem ekspertem, może gram z niewłaściwymi parametrami.

5

W przypadku, gdy są uruchomione w tym z Pasażerem 5+ i aplikacja Rails jest aplikacja 2.3.x, teraz trzeba dodać plik config.ru do aplikacji:

# 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 

Więcej szczegółów w official announcement i github ticket.

Wiem, że pytanie OP dotyczyło Rails 3.1, ale chciałem włączyć to tutaj, ponieważ dane wyjściowe są identyczne, a wyniki wyszukiwania doprowadziły mnie do tego posta.

+0

To rozwiązuje mój problem. Dzięki @Matt Sanders –

+0

Niesamowite, cieszę się, że pomogło! –

+1

Spędziłem 3 godziny, szukając tego! Wiele kudos. Dzięki!! –