如何使用 rails 和 docker 上的 nginx 提供编译资产?

How to serve compile assets with rails and nginx on docker?

我一直在为 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;
    }
}

我也尝试修改 proxy_pass 为我正确的 url,但它没有用。基本上,在 url 之后总会有一个“/portal/”,例如“mytestwebsite.com/portal/signin”。所有这些都在 docker 容器中 运行,根据我的检查,根路径似乎是正确的。

如果有人知道为什么它不起作用,请随时为我指明正确的方向!谢谢!

nginx 一切正常,问题是我没有正确地将我的卷与我的 docker-compose 链接!