我正在尝试让exception_notification和rails一起工作。我查看了其他一些问题,并在exception_notification gem页面上大量阅读了ReadMe。但是,在主要版本切换到4.0之前,大多数其他教程和问题似乎都已过时一年左右。更奇怪的是,正确的电子邮件似乎是在开发模式下发送的,但不是生产模式,这是我真正想要的地方。
以下是相关代码:
我在自述文件中使用gem 'exception_notification'
进行了安装。
然后......在config / environments / production.rb
中Whatever::Application.configure do
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => 'blah@blah.com',
:password => 'blahblah',
:authentication => 'plain',
:enable_starttls_auto => true
}
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = {
:host => 'www.blah.com'
}
ActionMailer::Base.default :from => 'BlahApp <reply@blah.com>'
Paperclip.options[:command_path] = "/usr/bin/"
config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Error!] ",
:sender_address => %{<reply@blah.com>},
:exception_recipients => ['"Test Recipient" <tester@blah.com>', '"Test 2" <test2@gmail.com>'],
}
正如我所说,当我将其复制/粘贴到development.rb中时,它似乎正常工作并发送电子邮件(虽然我实际上并没有收到它们,Paperclip正在捕获它们并在浏览器中打开它们,以及他们有我想要的东西)。然后在生产中,没有任何反应,当我检查日志文件时,它似乎甚至没有尝试发送电子邮件。没有收到错误,除了我故意抛出的错误。
我看到有一些与SMTP相关的问题,所以我也尝试直接将smtp_settings直接放入ExceptionNotification的电子邮件配置哈希中(虽然外面仍然有相同的设置),但没有运气。
我觉得我错过了一些愚蠢的东西。它应该是简单易用的。有什么想法吗?非常感谢!
答案 0 :(得分:0)
好的,问题是显然以前的开发人员(我继承了这个项目)已经设置了一种不同类型的错误捕获,只是呈现了不同的错误页面。该函数仅在生产中运行,并且它阻止了对exception_notification的调用,这就是为什么它在生产中没有做任何事情,但在开发中工作正常。所以......我最后做的就是这个......
在app中......这已经在controllers / application_controller.rb文件中了:
unless Rails.application.config.consider_all_requests_local
#Commenting this would show user a blank page but also show a detailed error message. Don't do this
#Unless absolutely necessary.
rescue_from Exception, with: lambda { |exception| render_error 500, exception }
rescue_from ActionController::RoutingError, ActionController::UnknownController, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| render_error 404, exception }
end
并且render_error函数有一些很好,渲染了错误页面。所以我在步骤中添加了如此引发对exception_notification的调用......
def render_error(status, exception)
if (status != 404)
ExceptionNotifier::Notifier
.exception_notification(exception, options.merge(:env => env))
.deliver
end
respond_to do |format|
format.html { render template: "home/error_#{status}", layout: 'layouts/heropage', status: status }
format.all { render nothing: true, status: status }
end
end
答案 1 :(得分:0)
请添加Gemfile gem 'exception_notification', '4.1.0.rc1'
和您的production.rb文件
config.consider_all_requests_local = false
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options{host:'http://yourUrl.herokuapp.com/'
}
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: 'gmail.com',
authentication: "plain",
enable_starttls_auto: true,
user_name: "youremail@gmail.com",
password: "Password"
}
config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Notifer] ",
:sender_address => %{"Exception Notification" < sender@domain.com>},
:exception_recipients => %w{first@domian.com second@domain.com }
}