ruby on rails - rails - Notificación de excepción Gema y rieles 3
ruby on rails software (17)
Estoy intentando poner esto en funcionamiento, pero veo "ExceptionNotifier constante no inicializado" cada vez que inicio mi servidor.
http://github.com/rails/exception_notification
En mi Gemfile tengo
gem "exception_notification",: git => " http://github.com/rails/exception_notification.git " http://github.com/rails/exception_notification.git branch => "master"
Intenté poner la configuración como se muestra en el archivo léame de github dentro de config / application.rb, config / environment.rb y config.ru. Reemplacé "Lo que sea" con el nombre de mi aplicación.
Copié y pegué la configuración exception_notification de la aplicación anterior a la nueva y falló. Me trajo aquí y ninguna de las respuestas anteriores estaba actualizada. Desde la versión 4.x, el middleware se renombró a ExceptionNotification::Rack
, por lo que la configuración de middleware se ve así:
Whatever::Application.config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
}
El repositorio oficial en github ahora es: github.com/smartinez87/exception_notification
En el Gemfile
gem "exception_notification", :require => ''exception_notifier'', :git => "https://github.com/smartinez87/exception_notification.git"
En config / initializers / exception_notification.rb
Rails.application.config.middleware.use ExceptionNotifier,
:email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
En realidad, ahora, es mucho más fácil. En tu Gemfile
necesitas escribir:
gem "exception_notification", :git => "http://github.com/rails/exception_notification.git", :require => ''exception_notifier''
Y todo debe ser arreglado. La opción :require
es crucial (supongo que debido a que los nombres difieren debes especificarlo explícitamente). Todos los demás parches mencionados anteriormente se han fusionado, supongo.
Estoy usando Rails 3.0.4 y tuve el mismo problema que el anterior. La única solución que funcionó para mí fue instalar v1.2 de excepción_notificación para rails 3 (asegúrese de usar la rama / versión correcta) como PLUGIN
rails plugin install https://github.com/railsware/exception_notification.git
y use en production.rb el código que todos mencionan:
config.middleware.use ExceptionNotifier,
:email_prefix => "[some prefix] ",
:sender_address => %{"Notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Definitivamente no funcionó para mí como una joya y el archivo Léame dice "Exception Notifier Plugin for Rails" y no menciona nada sobre la instalación como gema.
Acosar
La última versión de la gema oficial funciona con Rails 3, puedes encontrarla aquí: github.com/smartinez87/exception_notification .
El lanzamiento de la próxima gema hará innecesaria la opción :require => ''exception_notifier''
.
Me tomó un poco de trabajo pero conseguí que el Notificador de excepciones funcionara con Rails 3.0.0:
1- rails plugin install http://github.com/sickill/exception_notification.git
(Si no desea utilizar esta horquilla, simplemente aplique su parche manualmente al plugin original de Rails: solo tiene 3 líneas). Corrige el ''error de nombre de controlador del método indefinido''
2- En application.rb:
config.middleware.use "::ExceptionNotifier" , :email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
3- Aplica el parche de Lawrence Pit . ( ACTUALIZACIÓN: este enlace parece estar roto) uninitialized constant ActiveRecord::RecordNotFound
error uninitialized constant ActiveRecord::RecordNotFound
como se documenta here .
Eso es.
Ok, está funcionando ahora para mí:
# 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{[email protected]},
:exception_recipients => %w{[email protected]}
Parece que Rails 3 no puede usar este complemento en forma de gema. ¿Tal vez las aplicaciones de rack no se pueden cargar desde gemas? Lo instalé como un complemento y cambié la sintaxis de configuración a:
config.middleware.use ":: ExceptionNotifier"
en lugar de
config.middleware.use ExceptionNotifier
Pude hacer que funcione con lo siguiente en production.rb:
config.after_initialize do
config.middleware.use ExceptionNotifier,
:email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
end
RESPUESTA ACTUALIZADA a partir del 3/14 ...
Solo necesitas hacer gem exception_notification
en tu archivo gem. No es necesario ''requerir''.
Además, otros cambios solo directamente desde los documentos ...
"A partir de la versión 4.x, la sintaxis de configuración ha cambiado. Todas las opciones relacionadas con el correo electrónico DEBEN estar anidadas bajo la tecla: correo electrónico".
al igual que...
Whatever::Application.config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
}
Si está haciendo un rescue_from Exception, with: :render_500
para manejar mostrando una plantilla / página de 500, ya no envía un correo electrónico con solo esto.
config.middleware.use ExceptionNotifier,
:email_prefix => "[some prefix] ",
:sender_address => %{"Notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Tendrá que enviarlo manualmente en el método que maneja la excepción
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
Así que ponga las cosas de configuración en su entorno (production.rb) y el código de manejo de excepciones en su controlador de aplicaciones.
Todas las respuestas anteriores están desactualizadas, ahora puede simplemente agregar esto a su archivo gem:
gem ''exception_notification'', :require => ''exception_notifier''
Y edite su archivo de configuración production.rb como se indica en el archivo Léame:
config.middleware.use ExceptionNotifier,
:email_prefix => "[Exception] ",
:sender_address => %{"Exception Notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Tuve el mismo problema ahora y lo resolví de esta manera:
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" <[email protected]>},
:exception_recipients => %w{[email protected]}
Estoy refabricando un proyecto de Rails 2.3 a 3.0, así que no lo he intentado en una nueva instalación.
Editar:
En realidad, podría ser mejor (o "más correcto") colocar la inicialización de ExceptionNotifier en un archivo de inicializador separado en config / initializers / en lugar de application.rb.
config / initializers / exception_notifier.rb
MyApp::Application.config.middleware.use ExceptionNotifier,
:email_prefix => "[some prefix] ",
:sender_address => %{"Notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Usando Rails 3.0.3 esto funciona para mí:
gem "exception_notification", :git => "https://github.com/sickill/exception_notification.git", :require => ''exception_notifier''
: la parte de git se importa porque es una versión parcheada para evitar el ''error de nombre de controlador de método indefinido'' y: requiere que se solicite la lib correcta.
Luego, en mi archivo de entorno production.rb solo tengo esto (del manual)
config.middleware.use ExceptionNotifier,
:email_prefix => "[MyApp] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Parece que hay muchas maneras diferentes de hacer que esto funcione, pero esta fue mi manera.
¡Aclamaciones!
hasta ahora (2012-ago-03) el sitio oficial es: github.com/smartinez87/exception_notification , y de acuerdo con el archivo README, es compatible con Rails3 a la perfección.
paso 1. edite su Gemfile:
gem ''exception_notification''
paso 2.
A partir de Rails 3, ExceptionNotification se utiliza como middleware de rack, por lo que puede configurar sus opciones en su archivo config.ru o en el entorno en el que desea que se ejecute. En la mayoría de los casos, querrá que ExceptionNotification se ejecute en producción. Puedes hacer que funcione
Whatever::Application.config.middleware.use ExceptionNotifier, :email_prefix => "[Whatever] ", :sender_address => %{"notifier" <[email protected]>}, :exception_recipients => %w{[email protected]}
github.com/smartinez87/exception_notification
Esta gema se ha actualizado para los rieles 3.x y acabo de probar en 3.0.7 y la instalación es mucho más simple.
Gemfile:
gem ''exception_notification''
Inicializador:
Rails.application.config.middleware.use ExceptionNotifier,
:email_prefix => "[Whatever] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Que sea simple tonto
En gemfile
gem ''exception_notification'', :require => ''exception_notifier''
En el archivo application.rb
config.middleware.use ExceptionNotifier,
:email_prefix => "[ERROR] ",
:sender_address => %{"Exception Notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
Tu has hecho ..: *