Назад | Перейти на главную страницу

Настройка Nginx, Thin и Rails. Имеет доступ к статическим страницам, но не к динамическим

Я установил nginx (ниже nginx.conf) и thin. И nginx, и thin (2 сервера) работают (я проверил, что они работают). Я могу получить доступ к статической странице в общедоступном каталоге rails, например index.html, но если я введу любой другой URL-адрес, я получу страницу 500, сгенерированную nginx, со словами: «К сожалению, что-то пошло не так». Любая помощь в том, что я делаю неправильно, приветствуется. Я хочу иметь доступ к приложению rails.

http {
include   /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout 30;

#gzip  on;

# Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
include /etc/nginx/conf.d/*.conf;

#Rails app config here
upstream Backend  {
      server 127.0.0.1:3000;
      server 127.0.0.1:3001;
}

server {
       listen   80;
       server_name www.domain.com;
       rewrite ^/(.*) http://domain.com permanent;
}


server {
        listen   80;
                    server_name domain.com;

        access_log /applications/RailsApp/log/access.log;
        error_log /applications/RailsApp/log/error.log;

        root /applications/RailsApp/public;
        # index  index.html;

        location / {
                      proxy_set_header  X-Real-IP  $remote_addr;
                      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_set_header Host $http_host;
                      proxy_redirect off;

                      if (-f $request_filename/index.html) {
                                       rewrite (.*) $1/index.html break;
                      }

                      if (-f $request_filename.html) {
                                       rewrite (.*) $1.html break;
                      }

                      if (!-f $request_filename) {
                                       proxy_pass http://Backend;
                                       break;
                      }
        }

 }

}

Это именно мой nginx.conf, за исключением domain.com, который является заполнителем для фактического домена.

После того, как мы поняли, что ошибка была вызвана rails, а не nginx или thin, проблема была решена довольно быстро, проверив log / production.log в моем приложении Rails. У меня было две проблемы.

Сначала сокет для моей производственной базы данных в config / database.yml был неправильным. Мне пришлось изменить его с неправильного сокета: tmp / mysql.sock на то, где он на самом деле находится в моей системе, socket: var / lib / mysql / mysql.sock.

После этого в log / production.log появилась еще одна ошибка о том, что файл css не был предварительно скомпилирован. Это было исправлено путем редактирования config / environment / production.rb и изменения config.assets.compile = false на config.assets.compile = true.