Rails:我如何需要 ActiveSupport 的rescue_from 方法?

Posted

技术标签:

【中文标题】Rails:我如何需要 ActiveSupport 的rescue_from 方法?【英文标题】:Rails: How do I require ActiveSupport's rescue_from method? 【发布时间】:2014-11-20 19:27:51 【问题描述】:

我在application controller中有这个代码:

# Method to capture and handle all exceptions
rescue_from Exception do |ex|
  Rails.logger.debug ex
  do_stuff(ex)
end

我想把它移到一个模块中,然后:

class ApplicationController < ActionController::Base
  include 'module'
...

现在我的模块看起来像:

# lib/exception_mailer.rb
require 'action_mailer'
require 'active_support'

module ExceptionMailer

  # Method to capture and handle all exceptions
  rescue_from Exception do |ex|
...

我得到:undefined method 'rescue_from' for ExceptionMailer:Module

我用谷歌搜索了“如何在模块中包含rescue_from?” ——我还是有点迷茫。

【问题讨论】:

此链接可能会对您有所帮助。 apidock.com/rails/ActiveSupport/Rescuable/ClassMethods/… 我想我找到了一个解决方案,使用extend ActiveSupport::Concern 并使用included do 块。 Rails 是我的 gem 的依赖项。我目前不需要任何东西。 【参考方案1】:
module Exceptionailer
  # http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
  extend ActiveSupport::Concern

  included do
    rescue_from Exception do |ex|
      ...
    end
  end

end

【讨论】:

添加 extend ActiveSupport::Concern 并使用 included do 块解决了我的问题。

以上是关于Rails:我如何需要 ActiveSupport 的rescue_from 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSTimeZone -timeZoneWithName: 与 Rails ActiveSupport 中的城市名称?

rails activesupport 通知 - 错误的数据库运行时值

使用 Ruby on Rails ActiveSupport::Concern 功能时如何“嵌​​套”包含模块?

Rails ActiveSupport:如何断言引发了错误?

如何从 Rails 通知访问 current_user?

带 ActiveSupport 的默认时区(不带 Rails)