Rails 4.0 的自定义错误处理

2024-03-20

我正在使用 Ruby 2.0 和 Rails 4.0 构建 Ruby on Rails api。我的应用程序几乎只是一个 JSON API,因此如果发生错误(500、404),我想捕获该错误并返回格式良好的 JSON 错误消息。

我试过了this https://coderwall.com/p/w3ghqq并且:

rescue_from ActionController::RoutingError, :with => :error_render_method

def error_render_method
  puts "HANDLING ERROR"
  render :json => { :errors => "Method not found." }, :status => :not_found
  true
end

在我的应用程序控制器中。

这些都不起作用(根本没有捕获异常)。我的谷歌搜索显示,这在 3.1 和 3.2 之间发生了很大变化,而且我找不到任何关于如何在 Rails 4.0 中执行此操作的好的文档。

有人知道吗?

Edit这是我进入 404 页面时的堆栈跟踪:

Started GET "/testing" for 127.0.0.1 at 2013-08-21 09:50:42 -0400

ActionController::RoutingError (No route matches [GET] "/testing"):
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'


Rendered /Library/Ruby/Gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
Rendered /Library/Ruby/Gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/routes/_route.html.erb (2.9ms)
Rendered /Library/Ruby/Gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/routes/_route.html.erb (0.9ms)
Rendered /Library/Ruby/Gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.1ms)
Rendered /Library/Ruby/Gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (38.3ms)

我不认为我希望它走到这一步,应该有东西捕获它并返回适当的 json 错误响应。


该请求甚至没有到达您的应用程序。

您需要定义一个包罗万象的路由,以便 Rails 将请求发送到您的应用程序,而不是显示错误(在开发中)或呈现 public/404.html 页面(在生产中)

修改您的routes.rb文件以包含以下内容

match "*path", to: "errors#catch_404", via: :all

在你的控制器中

class ErrorsController < ApplicationController

  def catch_404
    raise ActionController::RoutingError.new(params[:path])
  end
end

和你的rescue_from那么应该捕获错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4.0 的自定义错误处理 的相关文章

随机推荐

  • bash 中的视频方向检测

    我需要检测视频是以纵向还是横向模式录制的 然后以脚本方式将其转换为正确的方向 if v orient landscape then ffmpeg i file mp4 vf transpose 1 file ogv else ffmpeg
  • ABAP中调用方法的不同方式

    抱歉这个基本的 ABAP 问题 ABAP中调用方法有哪些不同的方式 他们的 官方 名字是什么 我听说过执行 方法调用和内部 内联方法调用 执行使用PERFORM关键字和方法调用CALL METHOD语法 我猜 但什么是 内部 或 内联方法调
  • 如何使用 std::cin 读取 bool

    我是 C 新手 我想知道函数 cin 在布尔数据的情况下如何工作 比方说 bool a cin gt gt a 我知道如果我给出 0 或 1 我的数据 a 将是 true 或 false 但是如果我给出另一个整数甚至一个字符串会发生什么 我
  • 允许所有用户进行临时分发查询

    我正在使用 AD Hoc 分布式查询将数据从 MS SQL Server 2008 传输到 MS Access 该过程使用单个 SQL 语句启动 INSERT INTO OpenDataSource Microsoft Jet OLEDB
  • Arrays.stream(array_name).sum() 比迭代方法慢吗?

    我正在编写一个 leetcode 问题 https oj leetcode com problems gas station https oj leetcode com problems gas station 使用Java 8 我的解决方
  • 是否可以将Spring Data JPA中的@Lock和@Modifying @Query与Hibernate结合起来?

    我有一个 Lock注解与 Modifying Query一起使用时出现问题和查询本身执行更新语句 我的测试设置如下所示 Spring Boot 启动器 1 5 3 RELEASE 休眠 5 2 10 Final Spring Data JP
  • Git 将存储库镜像到特定分支

    我们公司尝试将一个github项目fork到我们自己的git服务器上 然后我们可以在上面添加我们自己的功能 我们只想签出一个特定的分支 并将所有分支和标签保留到该分支 然后复制 镜像 到我们的 git 服务器 在您的服务器上创建存储库 在其
  • Pandas:迭代 DataFrame 列表并将每个数据框导出到 Excel 工作表

    尝试自学编码以自动化工作中一些繁琐的任务 对于任何无意的无知 我深表歉意 我在 pandas python 3 x 中创建了数据框 我想将每个数据框打印到不同的 Excel 工作表中 这是我的 2 个数据帧 它工作完美 但我想缩放它以循环遍
  • 使用新的 YouTube API v3 解析 YouTube 订阅者计数

    我想使用新的 API v3 从我的 YouTube 频道获取订阅者数量 我在这里为 youtube 创建了一个 Google API 应用程序 谷歌 API 控制台 https code google com apis console 我有
  • 为什么“df.lookup”比“df.min”慢?

    我想通过使用来减少一些时间lookup after idxmin 而不是调用min and idxmin 在我看来 第一个应该更有效 因为在第二个中需要搜索两次值 一次搜索最小值 另一次搜索最小值的索引 即 2 倍 O NxM 而在首先 搜
  • VSCode:添加新的活动栏条目和自定义“页面”

    我想在开发扩展时添加新的活动栏条目并创建自定义 页面 这可能吗 我的想法是在 VSCode 中创建一个像 Sequel Pro 一样的数据库管理器 v 1 23 添加了扩展作者向活动栏添加图标的功能 自定义活动栏视图 https code
  • 如何获取多字节字符串的字节大小

    如何在 Visual C 中获取多字节字符串的字节大小 有没有函数或者我必须自己计算字符 或者 更一般地说 如何获得 TCHAR 字符串的正确字节大小 解决方案 tcslen T TCHAR string sizeof TCHAR EDIT
  • 这个吐司是从哪里来的?

    由于某种原因 我正在开发的应用程序正在显示一个 toast 显示我的设备上剩余的内部存储空间 即使我没有对此进行编码 这是一个屏幕截图 https i stack imgur com z2ERU png https i stack imgu
  • Python 2.7 的蓝牙? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对 Python 2 7 进行蓝牙编程的最佳方法是什么 我尝试使用pybluez https code
  • 使用预定脚本部署 Shiny App

    我有一个简单的脚本 可以在 Rstudio 中用于部署应用程序 rsconnect setAccountInfo name xx token xx secret xx xx library rsconnect deployApp xxx l
  • 链接后台 NSURLSession 上传

    有人成功链接 NSURLSession 后台上传吗 我正在尝试使用 NSURLSession 的后台上传来上传 5 MB 的巨大视频文件 上传必须按顺序进行 整个事情在前台工作得很好 我为此使用 AFNetwoking 它是多部分上传 但是
  • 尝试从一个页面推送到另一页面时出现“找不到组件工厂”错误

    尝试从一个页面推送到另一页面时出现错误 当我尝试推送到同一页面时 它不会给出该错误 只有我在从一个页面推送到另一页面时遇到错误 setRoot 也没有给出错误 this navCtrl push Page7 我已将 Page7 添加到 ap
  • Pandas fillna() 基于特定列属性

    假设我有这张桌子 Type Killed Survived Dog 5 2 Dog 3 4 Cat 1 7 Dog nan 3 cow nan 2 其中的价值之一Killed缺少 Type Dog 我想将平均值归咎于 Killed for
  • 最好的 SQL Server 性能优化技术是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我始终采取的方法是首先使用最少的索引集部署数据库 然后根据性能要求添加 更改索引 这种方法效果相当好 但是 它仍然没有告诉我可以在哪里
  • Rails 4.0 的自定义错误处理

    我正在使用 Ruby 2 0 和 Rails 4 0 构建 Ruby on Rails api 我的应用程序几乎只是一个 JSON API 因此如果发生错误 500 404 我想捕获该错误并返回格式良好的 JSON 错误消息 我试过了thi