From a39bdf689f4550ae1ccf152e2f00e199432c43a7 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:23:00 +0900 Subject: [PATCH 01/20] =?UTF-8?q?Rambulance=20=E3=81=AE=E5=B0=8E=E5=85=A5?= =?UTF-8?q?=E3=81=A8=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application.rb | 4 ++++ config/routes.rb | 1 + 2 files changed, 5 insertions(+) diff --git a/config/application.rb b/config/application.rb index 20e502e1..d3839b0e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,6 +11,10 @@ class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 8.0 + # Rambulance が提供するエラー用ルーティングを使うようにする + config.exceptions_app = self.routes + + # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. diff --git a/config/routes.rb b/config/routes.rb index a999d47c..b7fa93ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -105,4 +105,5 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? + mount Rambulance::Engine => "/" end From a4ce6e1b6fd2320b4cf5d307cbbf20d3c696ff7f Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:06 +0900 Subject: [PATCH 02/20] =?UTF-8?q?ErrorsController=20=E3=82=92=E6=96=B0?= =?UTF-8?q?=E8=A6=8F=E4=BD=9C=E6=88=90=EF=BC=88404/500/422=E7=94=A8?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app/controllers/errors_controller.rb diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb new file mode 100644 index 00000000..323baff2 --- /dev/null +++ b/app/controllers/errors_controller.rb @@ -0,0 +1,15 @@ +class ErrorsController < ApplicationController + layout 'application' # エラー画面にも通常のアプリと同じレイアウトを適用 + + def not_found + render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます + end + + def internal_server_error + render status: 500 # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + end + + def unprocessable_entity + render status: 422 # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + end +end From 548d72ac6cb86ea8c11e83d78984684875543cce Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:24 +0900 Subject: [PATCH 03/20] =?UTF-8?q?500=20Internal=20Server=20Error=20?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/internal_server_error.html.erb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 app/views/errors/internal_server_error.html.erb diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb new file mode 100644 index 00000000..2b96381d --- /dev/null +++ b/app/views/errors/internal_server_error.html.erb @@ -0,0 +1,14 @@ +<% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> +<% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

予期しないエラーが発生しました 😵‍💫

+

現在、問題を調査しています。しばらくしてからもう一度お試しください。

+
From 7c19b4082c90aefd89f821f6ef585318fb236325 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:44 +0900 Subject: [PATCH 04/20] =?UTF-8?q?422=20Unprocessable=20Entity=20=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errors/unprocessable_entity.html.erb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 app/views/errors/unprocessable_entity.html.erb diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb new file mode 100644 index 00000000..05aeb1fa --- /dev/null +++ b/app/views/errors/unprocessable_entity.html.erb @@ -0,0 +1,47 @@ +<% provide(:title, "リクエストが処理できませんでした… 😢") %> +<% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

+ リクエストが処理できませんでした… 😢 +

+

+ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。 +
+

+

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

+
+ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
From a456487f2efa075dd4e3ae1e97fea2996ea6cf62 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 14:53:42 +0900 Subject: [PATCH 05/20] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E5=85=B1=E9=80=9A=E3=81=AE=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=83=BC=E9=83=A8=E5=88=86=E3=82=92=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_header.html.erb | 6 ++++++ app/views/errors/internal_server_error.html.erb | 7 +------ app/views/errors/not_found.html.erb | 7 +------ app/views/errors/unprocessable_entity.html.erb | 7 +------ 4 files changed, 9 insertions(+), 18 deletions(-) create mode 100644 app/views/errors/_header.html.erb diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb new file mode 100644 index 00000000..f34cebc6 --- /dev/null +++ b/app/views/errors/_header.html.erb @@ -0,0 +1,6 @@ +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
\ No newline at end of file diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 2b96381d..78c20097 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> <% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

予期しないエラーが発生しました 😵‍💫

diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 2cd2898e..44fd826c 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "ページが見つかりませんでした... 🥺💦") %> <% provide(:desc, "ページが削除された可能性があります 🤔💭") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index 05aeb1fa..694c76f0 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "リクエストが処理できませんでした… 😢") %> <% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

From 44d493bc2ac1715b7bd249a1f8d4e647d46f31c4 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 16:05:01 +0900 Subject: [PATCH 06/20] =?UTF-8?q?=E5=85=B1=E9=80=9A=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E8=BF=BD=E5=8A=A0=EF=BC=88=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=89=E3=83=90=E3=83=83=E3=82=AF=E6=A1=88?= =?UTF-8?q?=E5=86=85=E3=83=BBTwitter=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=EF=BC=89=E2=80=BB500/422=E3=81=AF=E6=9C=AA?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_feedback_notice.html.erb | 7 +++++ .../_footer_links_and_timeline.html.erb | 20 +++++++++++++ app/views/errors/_header.html.erb | 2 +- .../errors/internal_server_error.html.erb | 12 ++++++-- app/views/errors/not_found.html.erb | 20 ++----------- .../errors/unprocessable_entity.html.erb | 29 ++----------------- 6 files changed, 42 insertions(+), 48 deletions(-) create mode 100644 app/views/errors/_feedback_notice.html.erb create mode 100644 app/views/errors/_footer_links_and_timeline.html.erb diff --git a/app/views/errors/_feedback_notice.html.erb b/app/views/errors/_feedback_notice.html.erb new file mode 100644 index 00000000..07623572 --- /dev/null +++ b/app/views/errors/_feedback_notice.html.erb @@ -0,0 +1,7 @@ +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

diff --git a/app/views/errors/_footer_links_and_timeline.html.erb b/app/views/errors/_footer_links_and_timeline.html.erb new file mode 100644 index 00000000..c3d141a9 --- /dev/null +++ b/app/views/errors/_footer_links_and_timeline.html.erb @@ -0,0 +1,20 @@ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb index f34cebc6..e06be800 100644 --- a/app/views/errors/_header.html.erb +++ b/app/views/errors/_header.html.erb @@ -3,4 +3,4 @@

CoderDojo Japan

子どものためのプログラミング道場


- \ No newline at end of file + diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 78c20097..842dcbdb 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -4,6 +4,14 @@ <%= render 'errors/header' %>
-

予期しないエラーが発生しました 😵‍💫

-

現在、問題を調査しています。しばらくしてからもう一度お試しください。

+

+ 予期しないエラーが発生しました 😵‍💫 +

+

+ 現在、問題を調査しています。しばらくしてからもう一度お試しください。 +
+

+ <%= render 'errors/feedback_notice' %>
+ +<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 44fd826c..fb74fa6f 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -11,23 +11,7 @@ ページが削除された可能性があります 🤔💭

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

+ <%= render 'errors/feedback_notice' %>

-
-
-

- 🐣 最近の情報発信 -

-
- - -
+<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index 694c76f0..c4e84db9 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -11,32 +11,7 @@ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

+ <%= render 'errors/feedback_notice' %>

-
-
-

- - 🐣 最近の情報発信 - -

-
- - -
+<%= render 'errors/footer_links_and_timeline' %> From 677d005b1665f966920956d4ea4552da42225275 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 11 Jun 2025 12:23:17 +0900 Subject: [PATCH 07/20] =?UTF-8?q?500/422=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=82=82?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E6=B8=88=E3=81=BF=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 62ad7c3445ef6fd09c116baf7c25690bf2fbaae0 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 11 Jun 2025 15:33:56 +0900 Subject: [PATCH 08/20] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=EF=BC=88404/500/422=EF=BC=89=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 6 ++++++ spec/requests/errors_spec.rb | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index b7fa93ac..7189c912 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,4 +106,10 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" + + if Rails.env.development? || Rails.env.test? + get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } + get "/trigger_422", to: "errors#unprocessable_entity" + end + end diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index d3286064..987cd05e 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -4,12 +4,25 @@ include Rambulance::TestHelper describe "Error requests" do - it 'should render a corresponding error page' do + it 'renders the 404 error page' do with_exceptions_app do get '/does_not_exist' end + expect(response.status).to eq(404) + end - assert_equal 404, response.status + it 'renders the 422 error page' do + with_exceptions_app do + get '/trigger_422' + end + expect(response.status).to eq(422) + end + + it 'renders the 500 error page' do + with_exceptions_app do + get '/trigger_500' + end + expect(response.status).to eq(500) end end end From 4b52ff74cafeb3412c8809941d37a15bf8736643 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 07:50:14 +0900 Subject: [PATCH 09/20] =?UTF-8?q?ErrorsController=E3=81=AE=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index 323baff2..dde9a422 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,5 +1,5 @@ class ErrorsController < ApplicationController - layout 'application' # エラー画面にも通常のアプリと同じレイアウトを適用 + layout 'application' def not_found render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます From 7e4737c6e9739812696784377e3b6f4c75729918 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 07:58:24 +0900 Subject: [PATCH 10/20] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E3=82=92=E4=B8=8A=E3=81=AB=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=E3=81=97=E3=81=A6=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index dde9a422..8251dce8 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -2,14 +2,17 @@ class ErrorsController < ApplicationController layout 'application' def not_found - render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます + # このアクションでは app/views/errors/not_found.html.erb が使用されます + render status: 404 end def internal_server_error - render status: 500 # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + render status: 500 end def unprocessable_entity - render status: 422 # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + render status: 422 end end From 9dac37e85a51d33c99890e7b03007cf3ddde100d Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 08:46:46 +0900 Subject: [PATCH 11/20] =?UTF-8?q?errors/header=E3=82=92=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96=E3=81=97=E3=80=81partial?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_header.html.erb | 6 ------ app/views/errors/internal_server_error.html.erb | 7 ++++++- app/views/errors/not_found.html.erb | 7 ++++++- app/views/errors/unprocessable_entity.html.erb | 7 ++++++- 4 files changed, 18 insertions(+), 9 deletions(-) delete mode 100644 app/views/errors/_header.html.erb diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb deleted file mode 100644 index e06be800..00000000 --- a/app/views/errors/_header.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 842dcbdb..7fb9a41d 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> <% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index fb74fa6f..03dab2ae 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "ページが見つかりませんでした... 🥺💦") %> <% provide(:desc, "ページが削除された可能性があります 🤔💭") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index c4e84db9..a8626ddb 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "リクエストが処理できませんでした… 😢") %> <% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

From c0d871a1101d4ce648939f6a665f752ffdd424e5 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 09:06:46 +0900 Subject: [PATCH 12/20] =?UTF-8?q?errors/feedback=5Fnotice=E3=82=92?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=80=81partial=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_feedback_notice.html.erb | 7 ------- app/views/errors/internal_server_error.html.erb | 8 +++++++- app/views/errors/not_found.html.erb | 8 +++++++- app/views/errors/unprocessable_entity.html.erb | 8 +++++++- 4 files changed, 21 insertions(+), 10 deletions(-) delete mode 100644 app/views/errors/_feedback_notice.html.erb diff --git a/app/views/errors/_feedback_notice.html.erb b/app/views/errors/_feedback_notice.html.erb deleted file mode 100644 index 07623572..00000000 --- a/app/views/errors/_feedback_notice.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 7fb9a41d..4be7c1b4 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -16,7 +16,13 @@ 現在、問題を調査しています。しばらくしてからもう一度お試しください。

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 03dab2ae..1d4dd298 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -16,7 +16,13 @@ ページが削除された可能性があります 🤔💭

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index a8626ddb..b1b9da76 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -16,7 +16,13 @@ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> From 092c3dd8b3189c4ed0468053ea4a3d15a92c5eb1 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 09:30:05 +0900 Subject: [PATCH 13/20] =?UTF-8?q?=E5=85=B1=E9=80=9A=E6=96=87=E8=A8=80?= =?UTF-8?q?=E3=81=AE=E8=A1=A8=E7=A4=BA=E7=A2=BA=E8=AA=8D=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92requestspec=E3=81=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/requests/errors_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index 987cd05e..9b568327 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -9,6 +9,7 @@ get '/does_not_exist' end expect(response.status).to eq(404) + expect(response.body).to include("子どものためのプログラミング道場") end it 'renders the 422 error page' do @@ -16,6 +17,7 @@ get '/trigger_422' end expect(response.status).to eq(422) + expect(response.body).to include("子どものためのプログラミング道場") end it 'renders the 500 error page' do @@ -23,6 +25,7 @@ get '/trigger_500' end expect(response.status).to eq(500) + expect(response.body).to include("子どものためのプログラミング道場") end end end From 8e7f468ee5e9570bf2c0db366c1e0f8038d89755 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 09:41:17 +0900 Subject: [PATCH 14/20] =?UTF-8?q?refactor:=20404=E3=83=BB500=E3=83=BB422?= =?UTF-8?q?=20=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AE=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=92=E4=B8=80=E5=85=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/routes.rb b/config/routes.rb index 7189c912..7030c283 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -107,6 +107,11 @@ mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" + Rails.application.routes.draw do + %w(404 500 422).each do |code| + match code, to: "errors#show", via: :all, defaults: { status_code: code } + end + if Rails.env.development? || Rails.env.test? get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } get "/trigger_422", to: "errors#unprocessable_entity" From 0103961d75f029df0a57d0bc70408c3da8e2d8e5 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:23:12 +0900 Subject: [PATCH 15/20] =?UTF-8?q?refactor:=20ErrorsController=20=E3=82=92?= =?UTF-8?q?=20show=20=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=81=AB=E9=9B=86=E7=B4=84=E3=81=97=E6=97=A7=E3=82=A2=E3=82=AF?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 34 ++++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index 8251dce8..d4e41f48 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,18 +1,28 @@ class ErrorsController < ApplicationController - layout 'application' + before_action :set_error_message - def not_found - # このアクションでは app/views/errors/not_found.html.erb が使用されます - render status: 404 + def show + render :show, status: @status_code end - def internal_server_error - # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます - render status: 500 - end + private - def unprocessable_entity - # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます - render status: 422 - end + def set_error_message + @status_code = params[:status_code].to_i + + case @status_code + when 404 + @title = "ページが見つかりませんでした... 🥺💦" + @desc = "ページが削除された可能性があります 🤔💭" + when 422 + @title = "リクエストが処理できませんでした… 😢" + @desc = "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" + when 500 + @title = "予期しないエラーが発生しました 😵‍💫" + @desc = "申し訳ありません。サーバーで問題が発生しています。" + else + @title = "予期せぬエラーが発生しました…😵" + @desc = "しばらく経ってから再度お試しください。" + end + end end From 21dbe7bda490d4a0c40fe55b98866b2c08af4ed7 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:38:59 +0900 Subject: [PATCH 16/20] =?UTF-8?q?refactor:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AEshow.html=E3=82=92=E6=96=B0?= =?UTF-8?q?=E8=A6=8F=E4=BD=9C=E6=88=90=E3=81=97footer=5Flinks=5Fand=5Ftime?= =?UTF-8?q?line=E3=83=91=E3=83=BC=E3=82=B7=E3=83=A3=E3=83=AB=E3=82=92?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/show.html.erb | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 app/views/errors/show.html.erb diff --git a/app/views/errors/show.html.erb b/app/views/errors/show.html.erb new file mode 100644 index 00000000..48437e6b --- /dev/null +++ b/app/views/errors/show.html.erb @@ -0,0 +1,49 @@ +<% provide(:title, @title) %> +<% provide(:desc, @desc) %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

<%= @title %>

+

+ <%= @desc %> +
+

+

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + + GitHub Issue + + に書いていただけると嬉しいです (>人< )✨ +

+
+ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
From ee6d1de5280af576d30de03dab50ca6d6800553f Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:46:25 +0900 Subject: [PATCH 17/20] =?UTF-8?q?refactor:=E4=B8=8D=E8=A6=81=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E6=97=A7=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=81=A8footer=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_footer_links_and_timeline.html.erb | 20 ------------- .../errors/internal_server_error.html.erb | 28 ------------------- .../internal_server_error.json.jbuilder | 1 - app/views/errors/not_found.html.erb | 28 ------------------- app/views/errors/not_found.json.jbuilder | 1 - .../errors/unprocessable_entity.html.erb | 28 ------------------- .../errors/unprocessable_entity.json.jbuilder | 1 - 7 files changed, 107 deletions(-) delete mode 100644 app/views/errors/_footer_links_and_timeline.html.erb delete mode 100644 app/views/errors/internal_server_error.html.erb delete mode 100644 app/views/errors/internal_server_error.json.jbuilder delete mode 100644 app/views/errors/not_found.html.erb delete mode 100644 app/views/errors/not_found.json.jbuilder delete mode 100644 app/views/errors/unprocessable_entity.html.erb delete mode 100644 app/views/errors/unprocessable_entity.json.jbuilder diff --git a/app/views/errors/_footer_links_and_timeline.html.erb b/app/views/errors/_footer_links_and_timeline.html.erb deleted file mode 100644 index c3d141a9..00000000 --- a/app/views/errors/_footer_links_and_timeline.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -
-
-

- - 🐣 最近の情報発信 - -

-
- - -
diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb deleted file mode 100644 index 4be7c1b4..00000000 --- a/app/views/errors/internal_server_error.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> -<% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- 予期しないエラーが発生しました 😵‍💫 -

-

- 現在、問題を調査しています。しばらくしてからもう一度お試しください。 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/internal_server_error.json.jbuilder b/app/views/errors/internal_server_error.json.jbuilder deleted file mode 100644 index 46a32f67..00000000 --- a/app/views/errors/internal_server_error.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "We're sorry, but something went wrong." diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb deleted file mode 100644 index 1d4dd298..00000000 --- a/app/views/errors/not_found.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "ページが見つかりませんでした... 🥺💦") %> -<% provide(:desc, "ページが削除された可能性があります 🤔💭") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- ページが見つかりませんでした... 🥺💦 -

-

- ページが削除された可能性があります 🤔💭 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.json.jbuilder b/app/views/errors/not_found.json.jbuilder deleted file mode 100644 index a323a2ab..00000000 --- a/app/views/errors/not_found.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved." diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb deleted file mode 100644 index b1b9da76..00000000 --- a/app/views/errors/unprocessable_entity.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "リクエストが処理できませんでした… 😢") %> -<% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- リクエストが処理できませんでした… 😢 -

-

- 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.json.jbuilder b/app/views/errors/unprocessable_entity.json.jbuilder deleted file mode 100644 index 81302a2a..00000000 --- a/app/views/errors/unprocessable_entity.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "The change you wanted was rejected. Maybe you tried to change something you didn't have access to." From 4e8612b06926398bd6434024008812013223adeb Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:59:55 +0900 Subject: [PATCH 18/20] =?UTF-8?q?refactor:=E9=87=8D=E8=A4=87=E3=81=97?= =?UTF-8?q?=E3=81=9Froutes.draw=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3=E3=83=B3=E3=82=B0=E3=82=92?= =?UTF-8?q?=E6=98=87=E9=A0=86(404=E2=86=92422=E2=86=92500)=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 7030c283..76248f60 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -107,8 +107,8 @@ mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" - Rails.application.routes.draw do - %w(404 500 422).each do |code| + # 全環境共通のエラーページルーティング + %w(404 422 500 ).each do |code| match code, to: "errors#show", via: :all, defaults: { status_code: code } end From 22227442883e03c06582ab299ca8214abaf916ac Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 13:24:28 +0900 Subject: [PATCH 19/20] =?UTF-8?q?refactor:application.rb=E3=81=8B=E3=82=89?= =?UTF-8?q?exceptions=5Fapp=E8=A8=AD=E5=AE=9A=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=97production/test=E7=92=B0=E5=A2=83=E3=81=B8=E7=A7=BB?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - application.rbからを削除 - production.rbとtest.rbの直後にを追加 - 開発環境では従来のバックトレース表示()を維持し、ローカルデバッグ性を確保 - 本番/CI環境では例外を自前ルーティング(,,)へ委譲することで一貫したカスタムエラー画面を提供 --- config/application.rb | 4 ---- config/environments/production.rb | 3 +++ config/environments/test.rb | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/config/application.rb b/config/application.rb index d3839b0e..20e502e1 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,10 +11,6 @@ class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 8.0 - # Rambulance が提供するエラー用ルーティングを使うようにする - config.exceptions_app = self.routes - - # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. diff --git a/config/environments/production.rb b/config/environments/production.rb index ce610264..50c92b54 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -12,6 +12,9 @@ # Full error reports are disabled. config.consider_all_requests_local = false + # 本番環境では例外を自前ルーティングへ + config.exceptions_app = self.routes + # Turn on fragment caching in view templates. config.action_controller.perform_caching = true diff --git a/config/environments/test.rb b/config/environments/test.rb index e0f4be7d..09ca29a1 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -22,6 +22,9 @@ config.consider_all_requests_local = true config.cache_store = :null_store + # テスト環境でも例外を自前ルーティングへ + config.exceptions_app = self.routes + # Render exception templates for rescuable exceptions and raise for other exceptions. config.action_dispatch.show_exceptions = :rescuable From 22c107b0d55d8b1dca3e203d77b7a868a4263177 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 15:28:33 +0900 Subject: [PATCH 20/20] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=EF=BC=8F?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=92=B0=E5=A2=83=E5=90=91=E3=81=91?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E7=A2=BA=E8=AA=8D=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 開発&テスト環境のみで 500/422 エラーを意図的に発生させる , ルートを追加 - Rambulance エンジンを開発/テスト環境でのみマウントして、ローカルでエラーページを確認しやすく設定 --- config/routes.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 76248f60..9341e2a5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -112,9 +112,14 @@ match code, to: "errors#show", via: :all, defaults: { status_code: code } end + # 開発/テスト環境のみの便利ルート ── if Rails.env.development? || Rails.env.test? - get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } - get "/trigger_422", to: "errors#unprocessable_entity" + # 500エラーを意図的に発生させる + get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } + # 422エラーを意図的に返す + get "/trigger_422", to: "errors#unprocessable_entity" + # Rambulance を開発/テスト環境でのみマウント + mount Rambulance::Engine => "/" end end