Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Rails plugin emailing information about errors happened in javascript scenarios.
JavaScript Ruby
branch: rails3

This branch is 1 commit ahead, 5 commits behind oruen:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
app
lib
tasks
test
.gitignore
MIT-LICENSE
README
Rakefile
init.rb
install.rb
uninstall.rb

README

JsExceptions
============

  Плагин занимается бомбардировкой электронной почты информацией об ошибках в сценариях javascript.

Как это работает
================

  При подключении на странице основного файла, exception_notifier.js, в браузерах Firefox и IE заменяется window.onerror хендлер.
  В браузерах на движке WebKit и Opera window.onerror не существует, и единственным способом отловить возникновение ошибки является
  try-catch:
  try {
    <код, который ломается>
  } catch (e) {
    // для остальных браузером подразумевается работающий window.onerror
    if (/Opera|Webkit/.test(navigator.userAgent)) {
      ExceptionNotifier.notify(e);
    }
    // прокидывать или нет ошибку выше - на ваш выбор
    throw(e);
  }
  После этого, при возникновении ошибки на странице, по адресу /js_exceptions уходит POST-запрос с информацией об ошибке.
  А уже там этот запрос обрабатывает Rails Metal хендлер, который рассылает емейлы по адресам из JsExceptions::Notifier.exception_recipients.
  

Что нужно, чтобы это заработало
===============================

  Так как используется Rails Metal, версия рельсов должна быть не ниже 2.3
  Плагин рассчитывает на использование в приложении Sprockets, но может быть использован и без него.

  Работа без Sprockets:

    1) Скопировать в public/javascripts файл app/javascripts/exception_notifier.js из плагина.
    2) Подключить файл в нужном месте страницы, предварительно подключив jQuery.

  Работа со Sprockets:

    Добавить vendor/plugins/js_exceptions/app/javascripts/notifying_start.js в начало списка source_files текущей конфигурации,
    а vendor/plugins/js_exceptions/app/javascripts/notifying_start.js в его конец.
    Пример:
      Было:
        :asset_root: public
        :load_path:
          - app/javascripts/
          - app/javascripts/**
          - vendor/sprockets/*/src
          - vendor/plugins/*/app/javascripts
        :source_files:
          - app/javascripts/application.js
      Стало:
        :asset_root: public
        :load_path:
          - app/javascripts/
          - app/javascripts/**
          - vendor/sprockets/*/src
          - vendor/plugins/*/app/javascripts
        :source_files:
          - vendor/plugins/js_exceptions/app/javascripts/notifying_start.js
          - app/javascripts/application.js
          - vendor/plugins/js_exceptions/app/javascripts/notifying_stop.js

    А я делаю всё тоже самое для всех конфигураций Sprockets добавляя в config/initializers файл со таким содержимым
    (используется http://github.com/neodude/sprockets-rails):
    
    class Sprocket
      protected
      def configuration
        conf = load_configuration
        source_files = conf[:source_files]
        if source_files
          source_files = source_files.to_a
          source_files.insert(0, "vendor/plugins/js_exceptions/app/javascripts/notifying_start.js")
          source_files.push("vendor/plugins/js_exceptions/app/javascripts/notifying_stop.js")
        end
        conf
      end
    end

Что ещё надо знать
==================

  Клиентская часть настраивается через свойства объект window.ExceptionNotifierOptions:
    logErrors - отправлять ли опоовещения об ошибках на сервер
    sendHtml - прикреплять ли html-содержимое страницы к отчету
  Можно воспользоваться хелпером js_exceptions_options

  Настройки почтовых сообщений во многом повторяют Exception Notifier:
    JsExceptions::Notifier.sender_address - адрес отправителя сообщений
    JsExceptions::Notifier.exception_recipients - список получателей писем
    JsExceptions::Notifier.email_prefix - префикс темы письма

  js-код вдохновлен DamnIT, https://damnit.jupiterit.com/
  ruby-код - Exception Notifier, http://github.com/rails/exception_notification/

Copyright (c) 2009-2010 oruen, released under the MIT license
Something went wrong with that request. Please try again.