webアプリケーションを学習しながら開発中です。開発環境は以下になります。
ローカル開発環境
Ruby 2.3.1
Rails 5.1.3
MySQL
HTTPステータスコード403を表示させたいのですが・・・・
現在エラーページを表示させたくていろいろやっていますがERBテンプレートを読み込んでくれていないようなので対処方法がわからず
困っております。実行したコマンドや作成したファイルは次の通りです。
config/environments/production.rb Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. # Code is not reloaded between requests. config.cache_classes = false # Eager load code on boot. This eager loads most of Rails and # your application in memory, allowing both threaded web servers # and those relying on copy on write to perform better. # Rake tasks automatically ignore this option for performance. config.eager_load = true # Full error reports are disabled and caching is turned on. config.consider_all_requests_local = false config.action_controller.perform_caching = true # Enable Rack::Cache to put a simple HTTP cache in front of your application # Add `rack-cache` to your Gemfile before enabling this. # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. # config.action_dispatch.rack_cache = true # Disable Rails's static asset server (Apache or nginx will already do this). config.serve_static_assets = true # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier # config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false # Generate digests for assets URLs. config.assets.digest = true # Version of your assets, change this if you want to expire all your assets. config.assets.version = '1.0' # Specifies the header that your server uses for sending files. # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true # Set to :debug to see everything in the log. config.log_level = :info # Prepend all log lines with the following tags. # config.log_tags = [ :subdomain, :uuid ] # Use a different logger for distributed setups. # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # Use a different cache store in production. # config.cache_store = :mem_cache_store # Enable serving of images, stylesheets, and JavaScripts from an asset server. # config.action_controller.asset_host = "http://assets.example.com" # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. # config.assets.precompile += %w( search.js ) # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. # config.action_mailer.raise_delivery_errors = false # Enable locale fallbacks for I18n (makes lookups for any locale fall back to # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify # Disable automatic flushing of the log to improve performance. # config.autoflush_log = false # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end
#例外の補足 app/controllers/apprication_controller.rb class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception layout :set_layout class Forbidden < ActionController::ActionControllerError; end class IpAddressRejected < ActionController::ActionControllerError; end rescue_from Exception, with: :rescue500 rescue_from Forbidden, with: :rescue403 rescue_from IpAddressRejected, with: :rescue403 private def set_layout if params[:controller].match(%r{\A(staff|admin|customer)/}) Regexp.last_match[1] else 'customer' end end def rescue403(e) @exception = e render 'errors/forbidden', status: 403 end def rescue500(e) @exception = e render 'errors/internal_server_error', status: 500 end end
# ERBテンプレートを作成 app/views/errors/forbidden.html.erb <div id="error"> <h1>403 Forbidden</h1> <p> <%= case @exception when ApplicationController::IpAddressRejected "あなたのIPアドレス(#{request.ip})からは利用できません。" else '指定されたページを閲覧する権限がありません。' end %> </p> </div>
#エラー場面が正しく表示されるかどうかを調べるコード。 app/controllers/admin/top_controller.rb class Admin::TopController < ApplicationController def index raise IpAddressRejected #意図的に例外を発生させる。 end end
アセットをプリコンパイルする。 $ rails assets:precompile RAILS_ENV=production
Rails を起動(アプリケーションの再起動)した後で
サーバーを起動する。 $ rails s -e production
ブラウザで http://localhost:3000/admin
表示させたいページ
403Forbidden
あなたのIPアドレス(10.0.2.2)からは利用できません。
と表示させたいのですが、
実際のページ
We're sorry, but something went wrong.
If you are the apprication owner check the lobs for more information.
とproductionモードにおけるデフォルトのエラ-画面が表示されてしまいます。
ERBテンプレートの app/views/errors/forbidden.html.erb が読み込めていないのか?それとも読み込んでも反映されて
いなのか?原因がわからないのでどなたか教えていただけないでしょうか?宜しくお願いします。
質問内容が長くて申し訳ございません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。