Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails自定义错误页工作和不工作_Ruby On Rails 4_Http Status Code 404_Http Status Code 500 - Fatal编程技术网

Ruby on rails 4 Rails自定义错误页工作和不工作

Ruby on rails 4 Rails自定义错误页工作和不工作,ruby-on-rails-4,http-status-code-404,http-status-code-500,Ruby On Rails 4,Http Status Code 404,Http Status Code 500,ruby-2.3.7 Rails 5.1.4 我试图了解Rails应用程序中的错误页面:如何创建它们以及如何调用/触发它们。我读过很多关于这方面的帖子和博客。我发现有几个使用相同的方法。它看起来很简单,所以我试着实现它 当我直接进入新的404或500页面时:…myapp/404或…myapp/500我得到了正确的自定义404/500页面。但当我触发另一个500错误时,我不会。例如:…myapp.employee/99999抛出错误,因为没有这样的员工: 500内部服务器错误 如果您是此网站的管理

ruby-2.3.7 Rails 5.1.4

我试图了解Rails应用程序中的错误页面:如何创建它们以及如何调用/触发它们。我读过很多关于这方面的帖子和博客。我发现有几个使用相同的方法。它看起来很简单,所以我试着实现它

当我直接进入新的404或500页面时:
…myapp/404
…myapp/500
我得到了正确的自定义404/500页面。但当我触发另一个500错误时,我不会。例如:
…myapp.employee/99999
抛出错误,因为没有这样的员工:

500内部服务器错误
如果您是此网站的管理员,请阅读此web应用程序的日志文件和/或web服务器的日志文件,以找出问题所在

如何让错误转到新的错误页面

代码:

config/environments/development.rb:
-------
#请参阅dev站点中的错误页面
config.consive_all_requests_local=false#true
config/application.rb:
-------
#添加了错误页面
config.exceptions\u app=self.routes
config/routes.rb
------
获取“/404”,至:“未找到错误”,via=>:all
获取“/500”,至:“错误#内部_服务器_错误”,:via=>:all
控制器/错误\u controller.rb
-----
类错误控制器<应用程序控制器
未找到def
回应待办事项|格式|
format.html{呈现状态:404}
结束
结束
def内部_服务器_错误
回应待办事项|格式|
format.html{呈现状态:500}
结束
结束
结束
--->这些工作,所以我不会粘贴在这里的内容。
app/views/errors/not_found.html.erb
app/views/errors/internal_server_error.html.erb
这是正确的方法吗?如果是,我遗漏了什么或不理解什么


感谢您的帮助。

您需要将这些添加到顶级(应用程序)控制器中,并相应地进行救援。我正在处理的项目中的一些示例代码:


rescue_from ActiveRecord::RecordNotFound do |e|
  puts "#{e.inspect}, PARAMS: #{params.inspect}" if Config[:verbose_tests]
  respond_with_404
end
rescue_from ActionController::RoutingError do |e|
  puts "#{e.inspect}, PARAMS: #{params.inspect}" if Config[:verbose_tests]
  respond_with_404
end
rescue_from Pundit::NotAuthorizedError do
  respond_with_403
end
在您的情况下,这将类似于:

// app/controllers/application_controller.rb

rescue_from ActiveRecord::RecordNotFound do
  not_found
end
rescue_from ActionController::RoutingError do
  not_found
end
rescue_from ActionController::StandardError do
  internal_server_error
end

确保您可以访问应用程序控制器中的
内部\u服务器\u error
not\u found
方法,您甚至可以在那里定义它们,然后当抛出错误时,您的应用程序应该做出相应的响应。

您需要在顶级(应用程序)控制器中添加这些方法并相应地进行救援。我正在处理的项目中的一些示例代码:


rescue_from ActiveRecord::RecordNotFound do |e|
  puts "#{e.inspect}, PARAMS: #{params.inspect}" if Config[:verbose_tests]
  respond_with_404
end
rescue_from ActionController::RoutingError do |e|
  puts "#{e.inspect}, PARAMS: #{params.inspect}" if Config[:verbose_tests]
  respond_with_404
end
rescue_from Pundit::NotAuthorizedError do
  respond_with_403
end
在您的情况下,这将类似于:

// app/controllers/application_controller.rb

rescue_from ActiveRecord::RecordNotFound do
  not_found
end
rescue_from ActionController::RoutingError do
  not_found
end
rescue_from ActionController::StandardError do
  internal_server_error
end

确保您可以访问应用程序控制器中的
内部\u服务器\u error
not\u found
方法,您甚至可以在那里定义它们,然后当抛出错误时,您的应用程序应该相应地响应。

谢谢。我不确定你的意思:
确保你有权访问你的内部服务器错误和在你的应用程序控制器中找不到方法
我将你建议的代码添加到了
app/controllers/application\u controller.rb
我仍然会收到错误。最简单的方法是从你的应用程序中复制并粘贴方法定义应用程序控制器中的错误(
未找到
内部服务器错误
)。否则,您的应用程序控制器将出错,因为它不知道哪些方法
未找到
内部服务器错误
谢谢帮助。它仍然不起作用。我无法在此处复制/粘贴我的代码。它丢失了它的格式。但是,我有我的控制器的方法和您在我的
app/controllers/application\u controller.rb中提到的救援模块,谢谢。我不确定你的意思:
确保你有权访问你的内部服务器错误和在你的应用程序控制器中找不到方法
我将你建议的代码添加到了
app/controllers/application\u controller.rb
我仍然会收到错误。最简单的方法是从你的应用程序中复制并粘贴方法定义应用程序控制器中的错误(
未找到
内部服务器错误
)。否则,您的应用程序控制器将出错,因为它不知道哪些方法
未找到
内部服务器错误
谢谢帮助。它仍然不起作用。我无法在此处复制/粘贴我的代码。它丢失了它的格式。但是,我有我的控制器的方法和您在我的
app/controllers/application\u controller.rb中提到的救援模块