自定义通知程序
您可以创建一个继承自 的自定义通知程序,EmailNotifier
它将User.current.email
在非生产环境中使用。
# app/models/exception_notifier/custom_notifier.rb
#
module ExceptionNotifier
class CustomNotifier < EmailNotifier
def initialize(options)
@fallback_exception_recipients = options[:fallback_exception_recipients]
options[:exception_recipients] ||= options[:fallback_exception_recipients]
super(options)
end
def call(exception, options = {})
options[:exception_recipients] = [User.current.email] unless Rails.env.production?
super(exception, options)
end
end
end
初始化器
例如,回退地址可以从初始化程序传递。
# config/initializers/exception_notification.rb
#
Rails.application.config.middleware.use ExceptionNotification::Rack, {
:custom => {
:fallback_exception_recipients => %w{exceptions@myapp.com},
# ...
}
}
current_user
代替User.current
我不确定你的User.current
电话是否可以在这里工作。但是,您将 传递current_user
给异常数据,如README中所示。
# app/controllers/application_controller.rb
#
class ApplicationController < ActionController::Base
before_filter :prepare_exception_notifier
private
def prepare_exception_notifier
request.env["exception_notifier.exception_data"] = {
:current_user => current_user
}
end
end
然后,ExceptionNotifier::CustomNotifier#call
用这个替换上面的方法:
# app/models/exception_notifier/custom_notifier.rb
#
module ExceptionNotifier
class CustomNotifier < EmailNotifier
# ...
def call(exception, options = {})
unless Rails.env.production?
if current_user = options[:env]['exception_notifier.exception_data'][:current_user]
options[:exception_recipients] = [current_user.email]
end
end
super(exception, options)
end
end
end