despliegue de Rails usando nginx y unicornio: 403 error prohibido

Acabo de instalar un VPS (Centos 6.3) y desplegar mi aplicación usando capistrano. El VPS ejecuta nginx y unicornio. Recibo un error 403 Prohibido al visitar el servidor: esta línea aparece en /var/log/nginx/error.log:

*5 directory index of "/var/www/current/public/" is forbidden, client: xxxxx, server: xxx, request: "GET / HTTP/1.1", host: "xxxx" 

Sin embargo, si agrego el index.html a mi aplicación de Rails en ./public, todo funciona sin problemas. Esto me hace pensar que las rutas no están funcionando.

También he establecido los permisos para todas las carpetas de / var / www usando chmod -R 755 * (probablemente no sea la mejor idea a largo plazo, pero quise excluir esto como una fuente de error). ¿Hay alguna otra forma de depurar esto con más detalle (el archivo error.log no me dice nada más)?

Cualquier ayuda es muy apreciada.

Este es mi archivo route.rb (todo funciona localmente en desarrollo)

 MyTest::Application.routes.draw do root :to => 'welcome#index' end 

El siguiente es mi archivo nginx.conf:

 upstream unicorn { server unix:/tmp/unicorn.blog.sock fail_timeout=0; } server { listen 80 default deferred; # server_name example.com; root /var/www/current/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 5; } 

Este es el unicorn_init.sh:

 #!/bin/sh set -e # Feel free to change any of the following variables for your app: TIMEOUT=${TIMEOUT-60} APP_ROOT=/var/www/current PID=$APP_ROOT/tmp/pids/unicorn.pid CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" AS_USER=########## set -u OLD_PIN="$PID.oldbin" sig () { test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` } run () { if [ "$(id -un)" = "$AS_USER" ]; then eval $1 else su -c "$1" - $AS_USER fi } case "$1" in start) sig 0 && echo >&2 "Already running" && exit 0 run "$CMD" ;; stop) sig QUIT && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" run "$CMD" ;; upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $OLD_PIN && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $OLD_PIN then echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi echo >&2 "Couldn't upgrade, starting '$CMD' instead" run "$CMD" ;; reopen-logs) sig USR1 ;; *) echo >&2 "Usage: $0 " exit 1 ;; esac 

Y finalmente, mi Gemfile:

 source 'https://rubygems.org' gem 'rails', '3.2.12' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'pg' gem 'execjs', '~> 1.4.0' gem 'therubyracer' gem "less-rails" # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', :platforms => :ruby gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' # To use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.0.0' # To use Jbuilder templates for JSON # gem 'jbuilder' # Use unicorn as the app server gem 'unicorn' # Deploy with Capistrano gem 'capistrano' # To use debugger # gem 'debugger' gem "haml", "~> 4.0.0" gem 'twitter-bootstrap-rails', '~> 2.2.6' gem "simple_form", "~> 2.1.0" 

Este es mi unicornio.

 root = "/var/www/current" working_directory root pid "#{root}/tmp/pids/unicorn.pid" stderr_path "#{root}/log/unicorn.log" stdout_path "#{root}/log/unicorn.log" listen "/tmp/unicorn.blog.sock" worker_processes 4 timeout 30 

Me lo imaginé. En Centos 6.3, las configuraciones estándar se almacenan en /etc/nginx/conf.d/ Después de eliminar la configuración predeterminada en este directorio, todo funcionó. Tenga en cuenta que probablemente es mejor vincular el archivo de configuración nginx personalizado a /etc/nginx/conf.d en lugar de / etc / nginx / sites-enabled (tuve que crear este directorio en mi sistema y luego incluirlo en mi / etc /nginx/nginx.conf).