我已经设置了 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”,解决了此问题。