微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rails 6 Docker + NGINX 为 webpacker 资产提供服务

如何解决Rails 6 Docker + NGINX 为 webpacker 资产提供服务

我正在尝试使用 Docker 部署我的 Rails 6.1.4 应用程序,并让 Nginx 处理资产服务。现在一切正常,除了当我尝试在 0.0.0.0:3000 上访问我的服务器时似乎找不到资产。

Nginx.conf

upstream app {
    server app:3000;
}

server {
    listen 80;
    server_name localhost;
    keepalive_timeout 5;
    
    root $RAILS_ROOT/public;

    access_log $RAILS_ROOT/log/access.log;
    error_log $RAILS_ROOT/log/error.log;

    location @app {
      proxy_redirect off;
      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_pass http://app;
    }

    location / {
      try_files $uri @app;
    }

    location ~ ^/(assets|packs)/ {
      gzip_static on;
      expires max;
      add_header Cache-Control public;
    }

    location = /favicon.ico {
      access_log off;
      log_not_found off;
    }
    
    location = /robots.txt  {
      access_log off;
      log_not_found off;
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /500.html {
    }
}

Nginx.Dockerfile

FROM Nginx

RUN apt-get update -qq && apt-get -y install apache2-utils

ENV RAILS_ROOT /var/www/dicom_dwh
workdir $RAILS_ROOT

RUN mkdir log
copY public public/
copY Nginx.conf /tmp/docker.Nginx

RUN envsubst '$RAILS_ROOT' < /tmp/docker.Nginx > /etc/Nginx/conf.d/default.conf

EXPOSE 80
CMD [ "Nginx","-g","daemon off;" ]

app.Dockerfile

FROM ruby:3.0.1

# Install Node 14 and yarn
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get update -qq && apt-get install -qq --no-install-recommends \
    nodejs \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
RUN npm install -g yarn@1

ENV RAILS_ROOT /var/www/dicom_dwh
ENV RAILS_ENV production
ENV RACK_ENV production

workdir $RAILS_ROOT
copY Gemfile Gemfile
copY Gemfile.lock Gemfile.lock
RUN bundle install --jobs 20 --retry 5 --without development test
copY . .

RUN bundle exec rails assets:precompile

EXPOSE 3000
CMD ["bundle","exec","puma","-C","config/puma.rb"]

docker-compose.yml

services:
    app:
        build:
            context: .
            dockerfile: app.Dockerfile
        container_name: application_instance
        command: bash -c "bundle exec puma -C config/puma.rb"
        volumes:             
            - .:/app
            - node-modules:/app/node_modules
        ports:
            - "3000:3000"
        depends_on:
            - database
            - redis
    database:
        image: postgres
        container_name: database_instance
        restart: always
        volumes:      
            - db_data:/var/lib/postgresql/data
        ports:
            - "5432:5432"
        env_file:
            - .env
        environment:
            POSTGRES_USER: ${POSTGRES_USER}
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
            POSTGRES_DB: ${POSTGRES_PRODUCTION_DB}
    Nginx:
        build:
            context: .
            dockerfile: Nginx.Dockerfile
        depends_on:
            - app
        ports:
            - 80:80
        volumes:
            - ./public:/app/public
    redis:
        image: redis
        container_name: redis_instance
        command: redis-server
        ports:
            - "6379"
        volumes:
            - redis:/data
volumes:
    db_data:
    redis:
    node-modules:

服务器启动正常,但我无法访问我的资产:

No assets being served

有谁知道这里出了什么问题?提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。