问题 尝试访问损坏的图片网址时,内部服务器错误500被抛出而不是404


我们在这里使用本教程设置了自定义404和500页的rails服务器:

http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages

虽然它很好用并且为所有类型的路径抛出404,但它在尝试访问任何类型的后缀路径时会产生内部服务器错误500,如en / foo.png,en / foo.pdf,en / foo.xml,...

但是像en / file.foo这样的东西会抛出404.所以只有有效的后缀会抛出500。

routes.rb结束:

if Rails.application.config.consider_all_requests_local
  match '*not_found', to: 'errors#error_404'
end

application_controller.rb

  unless Rails.application.config.consider_all_requests_local
    rescue_from Exception, with: :render_500
    rescue_from ActionController::RoutingError, with: :render_404
    rescue_from ActionController::UnknownController, with: :render_404
    rescue_from ::AbstractController::ActionNotFound, with: :render_404
    rescue_from ActiveRecord::RecordNotFound, with: :render_404
  end

  protected

  def render_404(exception)
    @not_found_path = exception.message
    respond_to do |format|
      format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 }
      format.all { render nothing: true, status: 404 }
    end
  end

  def render_500(exception)
    logger.fatal(exception)
    respond_to do |format|
      format.html { render template: 'errors/error_500', layout: 'layouts/application', status: 500 }
      format.all { render nothing: true, status: 500}
    end
  end

500出现:

Missing template errors/error_404 with {:locale=>[:de, :en], :formats=>[:png], :handlers=>[:erb, :builder, :coffee, :arb, :haml]}

2473
2018-04-23 12:36


起源

你能分享一下吗? routes.rb 文件和相关的控制器代码? - George Anderson
更新了它,非常感谢! - NielsH


答案:


我们发现了错误。

我们有一个error_controller.rb包含这个:

  def error_404
    @not_found_path = params[:not_found]
    render template: 'errors/error_404', layout: 'layouts/application', status: 404
  end

我们更改它以解决此问题:

  def error_404
    @not_found_path = params[:not_found]
    respond_to do |format|
      format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 }
      format.all { render nothing: true, status: 404 }
    end
  end

13
2018-04-25 18:13



我将在博客文章的底部添加一个注释,将其考虑在内。 - Edgar Gonzalez
很酷,非常感谢。 - NielsH


尝试添加

respond_to :html, :json, :png

以及控制器顶部的任何其他必要格式。如果我是对的,那么问题就在于此 format.all 在单个控制器操作中未设置为包括 :png 作为它响应的格式之一。

您可能还需要添加到您的 config/environment.rb 以下定义和任何类似的定义:

Mime::Type.register "image/png", :png

查看更多详情 这里。基本上,您需要设置要响应的mime类型。该错误消息表明rails不了解如何呈现格式 png


1
2018-04-25 08:13



非常感谢。但这不是问题! - NielsH