配置 Nginx、Thin 和 Rails。可以访问静态页面,但不能访问动态页面

配置 Nginx、Thin 和 Rails。可以访问静态页面,但不能访问动态页面

我已经设置了 nginx(下面的 nginx.conf)和 Thin。nginx 和 Thin(2 个服务器)都在运行(我已检查它们是否正在运行)。我可以访问 rails 公共目录中的静态页面,例如 index.html,但如果我输入任何其他 URL,我就会得到一个由 nginx 生成的 500 页,提示“很抱歉,但出了点问题。”如能帮助我解决我做错的事情,我将不胜感激。我希望能够访问 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 这里是实际域的占位符。

答案1

在意识到错误来自 rails 而不是 nginx 或 thin 后,通过检查 Rails 应用程序中的 log/production.log,问题很快就解决了。我遇到了两个问题。

首先,config/database.yml 中生产数据库的套接字不正确。我必须将其从不正确的套接字:tmp/mysql.sock 更改为系统上的实际套接字:var/lib/mysql/mysql.sock。

此后,log/production.log 中又出现了一个错误,提示 css 文件未预编译。通过编辑 config/environments/production.rb 并将“config.assets.compile = false”更改为“config.assets.compile = true”,解决了此问题。

相关内容