例外通知Gem和Rails 3

时间:2010-08-19 16:50:07

标签: ruby-on-rails exception-handling ruby-on-rails-3 ruby-on-rails-plugins

我正在尝试启动并运行,但每当我启动服务器时,我都会看到“未初始化的常量ExceptionNotifier”。

http://github.com/rails/exception_notification

在我的Gemfile中我有

gem“exception_notification”,:git => “http://github.com/rails/exception_notification.git”,:branch => “主”

我已尝试将配置如config / application.rb,config / environment.rb和config.ru中的github readme所示。我用我的应用程序名称替换了“Whatever”。

17 个答案:

答案 0 :(得分:57)

之前的所有答案都已过时,您现在只需将其添加到您的gemfile:

gem 'exception_notification', :require => 'exception_notifier'

并按照自述文件中的说明编辑您的production.rb配置文件:

config.middleware.use ExceptionNotifier,
  :email_prefix => "[Exception] ",
  :sender_address => %{"Exception Notifier" <support@example.com>},
  :exception_recipients => %w{you@me.com}

答案 1 :(得分:21)

官方gem的最新版本与Rails 3一起使用,你可以在这里找到它:https://github.com/smartinez87/exception_notification

下一个gem版本将不再需要:require => 'exception_notifier'选项。

答案 2 :(得分:13)

好的,它现在为我工作:

# Gemfile
gem "exception_notification", :git => "git://github.com/rails/exception_notification", :require => 'exception_notifier'

# application.rb, inside the config block
config.middleware.use ::ExceptionNotifier,
  :email_prefix => "ApplicationName-Errors: ",
  :sender_address => %w{office@application.com},
  :exception_recipients => %w{office@application.com}

答案 3 :(得分:10)

保持简单愚蠢

gemfile

gem 'exception_notification', :require => 'exception_notifier'

application.rb文件

  config.middleware.use ExceptionNotifier,
 :email_prefix => "[ERROR] ",
 :sender_address => %{"Exception Notifier" <Dummy_email@exapmle.com>},
 :exception_recipients => %w{Dummy_email@example.com}

你做完了......:*

答案 4 :(得分:4)

似乎Rails 3无法以gem形式使用此插件。也许机架应用程序无法从宝石加载?我将其作为插件安装,并将配置语法更改为:

config.middleware.use“:: ExceptionNotifier”

而不是

config.middleware.use ExceptionNotifier

答案 5 :(得分:4)

github上的官方回购现在是: https://github.com/smartinez87/exception_notification

在Gemfile中

gem "exception_notification", :require => 'exception_notifier', :git => "https://github.com/smartinez87/exception_notification.git"

在config \ initializers \ exception_notification.rb

Rails.application.config.middleware.use ExceptionNotifier,
  :email_prefix => "[Whatever] ",
  :sender_address => %{"notifier" <notifier@example.com>},
  :exception_recipients => %w{exceptions@example.com}  

答案 6 :(得分:3)

实际上,现在,它要容易得多。在Gemfile中你需要写:

gem "exception_notification", :git => "http://github.com/rails/exception_notification.git", :require => 'exception_notifier'

所有都应该修复。 :require选项至关重要(我猜因为名称不同,您必须明确指定)。 之前提到的所有其他补丁都已合并,我认为。

答案 7 :(得分:3)

我能够在production.rb中使用以下内容:

config.after_initialize do
 config.middleware.use ExceptionNotifier,
      :email_prefix => "[Whatever] ",
      :sender_address => %{"notifier" <notifier@example.com>},
      :exception_recipients => %w{exceptions@example.com}
end

答案 8 :(得分:3)

如果您正在执行rescue_from Exception, with: :render_500来处理显示500个模板/页面,则不再发送仅包含此内容的电子邮件

    config.middleware.use ExceptionNotifier,
  :email_prefix => "[some prefix] ",
  :sender_address => %{"Notifier" <notify@domain.com>},
  :exception_recipients => %w{recipient@domain.com}

您需要在处理异常的方法中手动发送

def render_500(exception)
    # email an error email if there's a 500 in production mode
    if Rails.env.production?
        ExceptionNotifier::Notifier.exception_notification(request.env, exception).deliver
    end
end 

所以将配置文件放在你的环境(production.rb)和应用程序控制器中的异常处理代码中。

答案 9 :(得分:3)

https://github.com/smartinez87/exception_notification

此gem已针对rails 3.x进行了更新,我刚刚在3.0.7上进行了测试,安装更加简单。

Gemfile:

gem 'exception_notification'

初始化程序:

Rails.application.config.middleware.use ExceptionNotifier,
  :email_prefix => "[Whatever] ",
  :sender_address => %{"notifier" <notifier@example.com>},
  :exception_recipients => %w{exceptions@example.com}

答案 10 :(得分:2)

我花了一些工作但是我使用Rails 3.0.0的Exception Notifier:

1- rails plugin install http://github.com/sickill/exception_notification.git

(如果您不想使用此fork,只需手动将his patch应用于原始Rails插件:它只有3行。)它修复了'undefined method controller_name error'

2-在application.rb中:

config.middleware.use "::ExceptionNotifier" , :email_prefix => "[Whatever] ",
                           :sender_address => %{"notifier" <notifier@example.com>},
                           :exception_recipients => %w{whoever@example.com} 

3-申请Lawrence Pit's patch更新:此链接似乎已损坏)它修复了uninitialized constant ActiveRecord::RecordNotFound错误,记录为here

就是这样。

答案 11 :(得分:2)

直到现在(2012年8月 - 03年),官方网站是:https://github.com/smartinez87/exception_notification,根据自述文件,它完全支持Rails3。

步骤1。编辑你的Gemfile:

gem 'exception_notification'

步骤2。

  

从Rails 3开始,ExceptionNotification被用作机架中间件,所以   您可以在config.ru文件或   你希望它运行的环境。在大多数情况下,你会想要   ExceptionNotification在生产中运行。您可以通过

使其工作
Whatever::Application.config.middleware.use ExceptionNotifier,
  :email_prefix => "[Whatever] ",
  :sender_address => %{"notifier" <notifier@example.com>},
  :exception_recipients => %w{exceptions@example.com}

答案 12 :(得分:2)

使用Rails 3.0.3这对我有用:

gem "exception_notification", :git => "https://github.com/sickill/exception_notification.git", :require => 'exception_notifier'

:git part是导入的,因为它是一个修补版本来绕过'undefined method controller_name error'并且:require需要正确的lib。

然后在我的production.rb环境文件中我只有这个(来自手册)

  config.middleware.use ExceptionNotifier,
    :email_prefix => "[MyApp] ",
    :sender_address => %{"notifier" <email@example.com>},
    :exception_recipients => %w{email@example.com}

似乎有许多不同的方法可以让它发挥作用,但这是我的方式。

干杯!

答案 13 :(得分:2)

我刚才遇到了同样的问题并以这种方式解决了这个问题:

的Gemfile

source 'http://rubygems.org'
gem 'exception_notification_rails3', :require => 'exception_notifier'

application.rb中

config.middleware.use ExceptionNotifier,
  :email_prefix => "[some prefix] ",
  :sender_address => %{"Notifier" <notify@domain.com>},
  :exception_recipients => %w{recipient@domain.com}

我正在将Rails 2.3项目重构为3.0,所以我没有在全新安装上尝试过这个。

修改:

将ExceptionNotifier初始化放在config / initializers /而不是application.rb中的单独初始化文件中可能实际上更好(或“更正确”)。

配置/初始化/ exception_notifier.rb

MyApp::Application.config.middleware.use ExceptionNotifier,
  :email_prefix => "[some prefix] ",
  :sender_address => %{"Notifier" <notify@domain.com>},
  :exception_recipients => %w{recipient@domain.com}

答案 14 :(得分:1)

我正在使用rails 3.0.4并遇到与上述相同的问题。对我有用的唯一解决方案是为rails 3安装exception_notification的v1.2(确保使用正确的分支/版本)作为PLUGIN

rails plugin install https://github.com/railsware/exception_notification.git

并在production.rb中使用每个人都提到的代码:

config.middleware.use ExceptionNotifier,
  :email_prefix => "[some prefix] ",
  :sender_address => %{"Notifier" <notify@domain.com>},
  :exception_recipients => %w{recipient@domain.com}

它绝对不适合我作为宝石,自述文件确实说“Rails的Exception Notifier插件”,并没有提到将其安装为gem。

哈利

答案 15 :(得分:1)

截至3/14的更新答案......

您只需在gem文件中执行gem exception_notification即可。不需要'需要'。

此外,其他更改只是直接来自文档......

“从4.x版开始,配置语法已更改。 所有与电子邮件相关的选项必须嵌套在:email密钥下。“

像这样......

Whatever::Application.config.middleware.use ExceptionNotification::Rack,
  :email => {
    :email_prefix => "[Whatever] ",
    :sender_address => %{"notifier" <notifier@example.com>},
    :exception_recipients => %w{exceptions@example.com}
  }

答案 16 :(得分:0)

我将exception_notification配置从旧应用程序复制并粘贴到新应用程序,但失败了。 它把我带到了这里,上述答案都不是最新的。 从4.x版开始,中间件被重命名为ExceptionNotification::Rack, 所以中间件配置看起来像这样:

Whatever::Application.config.middleware.use ExceptionNotification::Rack,
 :email => {
   :email_prefix => "[Whatever] ",
   :sender_address => %{"notifier" <notifier@example.com>},
   :exception_recipients => %w{exceptions@example.com}
 }