実現したいこと
起動したコンテナのpublic直下に404.htmlと500.htmlを反映する
発生している問題・分からないこと
エラーページ配信用にRailsのpublicに404.htmlと500.htmlを作成済みです
しかし、no cache状態でビルド後、コンテナ起動しても上記二つのファイルがコンテナに存在しません
以下、詳細です
- ホストのpublic/には確実に404.htmlと500.htmlが存在する
- .dockerignoreでpublicは指定されていない
- .dockerignoreで!/public/404.htmlと!/public/500.htmlを明示しても変わらず
- デフォルトのpublic/robots.txtはコンテナに反映されている
- リバプロとして設置しているNginxコンテナからエラーページを返すのが目的
エラーメッセージ
error
1なし
該当のソースコード
Dockerfile
1# --- ビルドステージ --- 2# 最新軽量版Rubyのイメージ(2025年1月時点) 3FROM ruby:3.3.7-alpine AS builder 4 5ENV LANG=C.UTF-8 \ 6 TZ=Asia/Tokyo 7 8RUN apk update && apk add --no-cache \ 9 build-base \ 10 yaml-dev \ 11 postgresql-dev \ 12 postgresql-client \ 13 git \ 14 bash \ 15 tzdata 16 17WORKDIR /app 18COPY Gemfile Gemfile.lock /app/ 19RUN bundle install 20COPY . /app/ 21 22# --- 実行ステージ --- 23FROM ruby:3.3.7-alpine 24 25ENV LANG=C.UTF-8 \ 26 TZ=Asia/Tokyo 27 28RUN apk update && apk add --no-cache \ 29 postgresql-client \ 30 bash \ 31 tzdata 32 33WORKDIR /app 34COPY --from=builder /app/ /app/ 35COPY --from=builder /usr/local/bundle /usr/local/bundle 36 37COPY entrypoint.sh /usr/bin/ 38RUN chmod +x /usr/bin/entrypoint.sh 39ENTRYPOINT [ "entrypoint.sh" ] 40 41EXPOSE 3000 42 43CMD [ "bundle", "exec", "puma", "-C", "config/puma.rb" ]
nginx.conf
1## Nginxの設定 2 3# Pumaとの通信に Unixドメインソケット を利用 4upstream api { 5 server unix:///app/tmp/sockets/puma.sock; 6} 7 8server { 9 listen 80; 10 server_name localhost; 11 12 # ログ出力先 13 access_log /var/log/nginx/access.log; 14 error_log /var/log/nginx/error.log; 15 16 # 静的ファイルのルート(Railsの /public を参照) 17 root /app/public; 18 19 # クライアントがアップロード可能な最大リクエストサイズ(m = MB) 20 client_max_body_size 100m; 21 22 # エラーページ指定 23 error_page 404 /404.html; 24 error_page 502 503 504 505 /500.html; 25 26 # エラーページへの直接アクセスをブロック 27 location = /404.html { 28 internal; 29 } 30 31 location = /500.html { 32 internal; 33 } 34 35 # リクエストファイル($uri)が存在すれば返し、なければRailsへルーティング 36 try_files $uri @api; 37 38 # リバースプロキシ設定 39 location @api { 40 proxy_pass http://api; 41 proxy_set_header Host $host; 42 proxy_set_header X-Real-IP $remote_addr; 43 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 44 } 45 46 keepalive_timeout 5; 47}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
マルチステージビルド導入済み。実行ステージをコメントアウトしても変わらないので、ビルド段階で404.htmlと500.htmlが何かの理由で含まれていない気がします。
補足
Ruby: 3.3.7 Rails: 7.2.2.1
RailsはAPIモード
これが原因でECS on Fargateへのデプロイ(タスク起動)が失敗して困っています

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。