logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 5b12624847f6a599e1bbb3b24fc87c3b222e6716
parent: 34ff11c49600e2ca8547f4044f2c73b33aa70c34
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Sun,  2 Apr 2017 19:43:09 +0200

Add proper error page for request timeouts

Diffstat:

MGemfile2+-
Mapp/controllers/application_controller.rb8++++++++
Aapp/views/errors/503.html.haml5+++++
Mconfig/initializers/timeout.rb4+++-
4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/Gemfile b/Gemfile @@ -50,6 +50,7 @@ gem 'rails-settings-cached' gem 'simple-navigation' gem 'statsd-instrument' gem 'ruby-oembed', require: 'oembed' +gem 'rack-timeout' gem 'react-rails' gem 'browserify-rails' @@ -89,5 +90,4 @@ group :production do gem 'rails_12factor' gem 'redis-rails' gem 'lograge' - gem 'rack-timeout' end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb @@ -12,6 +12,7 @@ class ApplicationController < ActionController::Base rescue_from ActionController::RoutingError, with: :not_found rescue_from ActiveRecord::RecordNotFound, with: :not_found rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity + rescue_from Rack::Timeout::RequestExpiryError, Rack::Timeout::RequestTimeoutError, with: :request_timeout before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? before_action :set_locale @@ -69,6 +70,13 @@ class ApplicationController < ActionController::Base end end + def request_timeout + respond_to do |format| + format.any { head 503 } + format.html { render 'errors/503', layout: 'error', status: 503 } + end + end + def current_account @current_account ||= current_user.try(:account) end diff --git a/app/views/errors/503.html.haml b/app/views/errors/503.html.haml @@ -0,0 +1,5 @@ +- content_for :page_title do + Request timeout + +- content_for :content do + It took too long to process your request. This might be a temporary server issue diff --git a/config/initializers/timeout.rb b/config/initializers/timeout.rb @@ -1,4 +1,6 @@ +Rack::Timeout::Logger.disable +Rack::Timeout.service_timeout = false + if Rails.env.production? Rack::Timeout.service_timeout = 90 - Rack::Timeout::Logger.disable end