2013-03-17 3 views
1

Я только что установил VPS (Centos 6.3) и развернул приложение, используя capistrano. VPS запускает nginx & единорог. Я получаю 403 Запретной ошибку при посещении сервера: эта строка появляется в /var/log/nginx/error.log:Развертывание рельсов с использованием nginx & unicorn: 403 запрещенная ошибка

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

Однако, если добавить index.html в моих рельсах приложения в ./public, все работает без проблем. Это заставляет меня думать, что маршруты не работают.

Я также установил разрешения для всех папок/var/www, используя chmod -R 755 * (вероятно, не лучшая идея в долгосрочной перспективе, но хотел исключить это как источник ошибки). Есть ли другой способ отладить это более подробно (файл error.log не говорит мне ничего другого)?

Любая помощь очень ценится.

Это мой routes.rb файл (все в местном масштабе работает в разработке)

MyTest::Application.routes.draw do 

    root :to => 'welcome#index' 
end 

Ниже мой 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; 
} 

Это 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 <start|stop|restart|upgrade|force-stop|reopen-logs>" 
    exit 1 
    ;; 
esac 

И, наконец, мой 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" 

Это мой unicorn.rb:

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 
+0

Какая у вас конфигурация единорога ('unicorn.rb')? – dimuch

+0

Я включил содержимое файла unicorn.rb. – apotry

+0

Вы проработали это руководство? http://nginxlibrary.com/403-forbidden-error/ – phoet

ответ

1

Я понял это. В Centos 6.3 стандартные конфигурации хранятся в файле /etc/nginx/conf.d/ После удаления конфигурации по умолчанию в этом каталоге все сработало. Обратите внимание, что, вероятно, лучше символизировать настраиваемый файл конфигурации nginx в /etc/nginx/conf.d вместо/etc/nginx/sites-enabled (мне пришлось создать этот каталог в моей системе, а затем включить его в свой файл/etc /nginx/nginx.conf).

Смежные вопросы