質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

2回答

141閲覧

Railsのpublicディレクトリ直下のファイルがコンテナに反映されない

yoshi_8

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2025/06/03 08:47

編集2025/06/03 16:23

実現したいこと

起動したコンテナの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へのデプロイ(タスク起動)が失敗して困っています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

docker-compose.ymlで旧ボリュームをapp/publicにマウントしていることが原因でした。
ボリューム再作成してコンテナ起動したら無事に反映されました。

投稿2025/06/04 05:22

yoshi_8

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

34行目を以下のようにしてみてはいかがでしょうか?

COPY --from=builder /app /app

投稿2025/06/04 02:59

keniroya

総合スコア117

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshi_8

2025/06/04 04:19

回答ありがとうございます。 試しましたが結果変わらずでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問