【发布时间】:2020-08-25 13:31:20
【问题描述】:
我一直在准备使用我的 rails 应用程序进行生产,但我在使用 nginx 时遇到了很多麻烦。与未预编译资产的开发相比,现在没有任何效果。我使用 sprockets 来处理 css、图像和字体以及用于 javascript 的 webpacker。问题是,每当我在看到的教程中尝试任何东西时,它都不起作用。我总是收到诸如“无路由匹配 [GET]”/packs/js/”或“无路由匹配 [GET]“/assets/...”之类的错误。
这是我的 default.conf 的样子:
upstream railsapp {
server hubsite:3000;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /app/public;
# Deny requests for files that should never be accessed
location ~ /\. {
deny all;
}
location ~* ^.+\.(rb|log|go|exe)$ {
deny all;
}
try_files $uri @rails;
# serve static (compiled) assets directly if they exist (for rails production)
location ~ ^/(assets|packs|images|javascripts|stylesheets|swfs|system)/ {
try_files $uri @rails;
access_log off;
gzip_static on;
# to serve pre-gzipped version
expires max;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
break;
}
location @rails {
proxy_pass http://railsapp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
}
# 404 HANDLING
location = /404.html {
internal;
}
}
我还尝试为我的正确 url 修改 proxy_pass,但没有成功。基本上,在 url 之后总会有一个“/portal/”,比如“mytestwebsite.com/portal/signin”。所有这些都在一个 docker 容器中运行,从我检查的结果来看,根路径似乎是正确的。
如果有人知道它为什么不起作用,请随时为我指明正确的方向!谢谢!
【问题讨论】:
-
您能否确认所有资产都已成功编译?我认为可能的原因: - 文件不存在或 nginx 无权访问文件。您还可以查看 nginx 错误日志。
标签: ruby-on-rails docker nginx nginx-reverse-proxy