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

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

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

2385閲覧

本番環境で404ページの修正したデザインが反映されない

begenner

総合スコア80

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/10/06 09:01

編集2021/10/12 10:26

現在AWS(EC2)上にDocker+Railsアプリをデプロイしています。
以下のサイトを参考にして404ページのデザインを修正して反映させましたが、デザインが適用されません。

Rails 5の404/500エラーページ、簡単作成手順 | 酒と涙とRubyとRailsと

何度GitHubからpullしてファイルの変更を反映させても、デザインが反映されない理由がnginxが原因かもしれませんが、対処方法が全くわかりません(m_ _m)

もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)

動作環境

RailsAWS
Ruby: 2.7.3Amazon linux2
Rails: 6.0.3.6nginx: 1.16.1
Devise: 4.7.3EC2、RDS(MySQL)
rails-dotenvを使用

困っていること

作成した404ページが反映されない

考えられること

nginxの設定が原因でpublic/404.htmlのファイルが反映されない?

試したこと

以下を参考にconfig/environments/development.rbconfig.consider_all_requests_localの値をfalseにしてlocalで動作確認しましたが自分が変更したデザインが表示されました。
404,500エラー発生時のエラーハンドリング及Slack通知の実装 - Qiita

期待する動作

public/404.htmlの自分のコードが反映されること

該当しそうなコード

app/controllers/application_controller.rb(1/3)

ruby

1class ApplicationController < ActionController::Base 2# : 3 if Rails.env.production? 4 rescue_from StandardError, with: :render_500 5 rescue_from ActiveRecord::RecordNotFound, with: :render_404 6 7 def render_404 8 render file: Rails.root.join('public/404.html'), status: :not_found, layout: false, content_type: 'text/html' 9 end 10 11 def render_500(e) 12 logger.error(e.message) 13 logger.error(e.backtrace.join("\n")) 14 render file: Rails.root.join('public/500.html'), status: :internal_server_error, layout: false, content_type: 'text/html' 15 end 16 end 17# : 18end

nginx.conf(2/3)

nginx

1upstream webapp { 2 server unix:///webapp/tmp/sockets/puma.sock; 3} 4 5server { 6 listen 80; 7 server_name 35.76.230.5; 8 9 access_log /var/log/nginx/access.log; 10 error_log /var/log/nginx/error.log; 11 12 root /webapp/public; 13 14 client_max_body_size 100m; 15 error_page 404 /404.html; 16 error_page 505 502 503 504 /500.html; 17 try_files $uri/index.html $uri @webapp; 18 keepalive_timeout 5; 19 20 location @webapp { 21 proxy_set_header X-Real-IP $remote_addr; 22 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 23 proxy_set_header Host $http_host; 24 proxy_pass http://webapp; 25 } 26} 27

docker-compose.yml(3/3)

docker

1 2ARG RUBY_VERSION=2.7.3 3FROM ruby:$RUBY_VERSION 4 5ENV APP_DIR /webapp 6ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE yes 7ENV DEBCONF_NOWARNINGS yes 8ENV LANG C.UTF-8 9ENV MY_BUNDLER_VERSION 2.1.4 10 11RUN mkdir $APP_DIR 12WORKDIR $APP_DIR 13 14# Node.js 15RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \ 16 && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ 17 && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ 18 && apt-get update -qq \ 19 && apt-get install -y --no-install-recommends \ 20 build-essential \ 21 libpq-dev \ 22 vim \ 23 nodejs \ 24 yarn 25 26COPY Gemfile Gemfile.lock /webapp/ 27COPY package.json yarn.lock /webapp/ 28RUN gem install bundler --no-document -v $MY_BUNDLER_VERSION && \ 29 bundle install 30RUN yarn install --production --frozen-lockfile && yarn cache clean 31 32COPY . $APP_DIR 33COPY entrypoint.sh /usr/bin/ 34RUN chmod +x /usr/bin//entrypoint.sh 35ENTRYPOINT [ "entrypoint.sh" ] 36EXPOSE 3000 37 38EXPOSE 3000 39CMD ["rails", "server", "-b", "0.0.0.0"] 40

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

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

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

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

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

neko_daisuki

2021/10/16 18:14

nginx.conf の以下の行を消して nginx を再起動、 その後 404 を表示させようとするとどうなりますか? error_page 404 /404.html;
begenner

2021/10/17 12:24 編集

error_page 404 /404.html; の記述を削除して docker-compose restart nginx を実行して再度起動しましたが、表示が変更されません。 プリコンパイルを実行してみましたが変化はありませんでした。 他に考えられる原因は何かあるのでしょうか?
neko_daisuki

2021/10/17 12:27

現状はどのような 404 ページが表示されるのでしょうか?
begenner

2021/10/17 12:35

現状では以下の文言が表示される状態です。 The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you are the application owner check the logs for more information.
neko_daisuki

2021/10/17 14:30

rails の public/404.html ですね。 削除してみたらどうでしょう。
begenner

2021/10/18 02:43

削除しても反映されません。 何が問題なのでしょうか?
guest

回答1

0

nginxの404とrails側の404は違うものです。

nginxの404

以下の設定をすると、/sidekiqでアクセスして、public/404.htmlの内容が反映されます。

server { location /sidekiq { return 404; } error_page 404 /404.html; }

railsの404ページ

rails側の404はnginx通してからになります、public/404.htmlを使っても良いですが、nginxの404ページと分けて、もっとリッチな404作ってもいいと思います。

class ApplicationController < ActionController::Base rescue_from ActionController::RoutingError, AccessDenied, with: :render_404 unless Rails.env.development? def render_404(_e = nil) # errorのテンプレートファイルを自前で用意する render template: 'errors/ER-01', formats: :html, status: :not_found, layout: 'application' end end

投稿2021/10/18 02:18

heroyct

総合スコア434

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

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

begenner

2021/10/18 02:52

nginxの404とrails側の404は違うことは知りませんでした。 現状sidekiqを使用していないのですが、その場合にrailsの public/404ページを表示させる方法はあるのでしょうか?
heroyct

2021/10/18 05:23

requestがサーバーにきたら、この順番で処理します。 request -> nginx -> rails(pumaなど) webサーバーの負担が少なくするためには、できるだけnginx側で404判定して、nginxでできない部分はrailsで処理する方が良いと思います。 なので、以下の手順で整理してください。(sidekiqはあくまでサンプルなので、気にしなくていいです) 1. 404にするURLの一覧 2. それぞれのURLに対してnginxで処理するかrailsで処理するかを決める 3. nginxで処理するURLはnginx側で設定する 4. railsで処理するURLはrails側で対応する(renderするファイルはpublid下ではくて、app/views下に置く) 404ページのメンテナンスが面倒の場合は、こちら参考して良さそうです。 https://qiita.com/aki77/items/623cf30724ed2e5908c4
begenner

2021/10/18 10:21

詳細にご回答いただきありがとうございます。 該当しない不規則な不特定多数のurlの場合を考慮したいのですが、nginxでそのような設定が可能なのでしょうか? 上記のqiitaのリンクでもrails側から public/404.html を読み込んでいるように感じます。 nginxを挟んだ場合は結局nginxの404ページになってしまいそうな気がします。 もし参考になりそうなリンクなどがあれば教えていただけると嬉しいです。
heroyct

2021/10/19 03:41

https://morizyun.github.io/blog/custom-error-404-500-page/index.html 質問に戻りますが、上のサイト書いてる内容はpublic/404.htmlと関係なく、rails側の404ページをカスタマイズする方法です。 > app/views/errors/error_404.html.haml と app/views/errors/error_500.html.haml を作成して404/500エラー時のViewを作成。 なので、public/404.html変更しても反映されないのが当然です。 一旦nginxとpublic/404.html忘れて、まずrails側の404ページを表示したらどうですか? こちらを外せば、開発でテストできるので、まずは開発環境で404ページを表示してみてください。 ``` unless Rails.env.development? ```
begenner

2021/10/19 14:24

なるほど... 手元で試してみます。 解決できなければ再度質問させていただきますのでお手数ですがよろしくお願いいたしまっす。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問