Как Hoptoad помогает на тестовом сервере

26 марта 2010, обновлена 04 июня 2010

Итак, Hoptoad – это такая продвинутая штука для записывания исключений в Rails-приложениях. Его использование выливается в то, что каждое новое исключение логируется, а также при желании отправляется тебе на почту. Удобно.

Но речь не об этом, а о том, что Hoptoad можно использовать на отладочном сервере (назовем его staging) для упрощения работы тестера. Для этого нужно настроить его так, чтобы он ошибку и показывал, и отправлял в Hoptoad.

По умолчанию Hoptoad логирует ошибки только тогда, когда не показывает (consider_all_requests_local = false). Самый простой способ это изменить – переопределить метод в ApplicationController:

#consider_all_requests_local должен быть true
class ApplicationController < ActionController::Base
  def rescue_action_locally(exception)
    if Rails.env == "staging" # or something else
      unless hoptoad_ignore_user_agent?
        HoptoadNotifier.notify_or_ignore(exception, hoptoad_request_data)
      end
      rescue_action_locally_with_hoptoad(exception)
    end
    super(exception)
  end
end

Результатом этого будет то, что ошибки с staging будут сыпаться в hoptoad и можно будет вместо неудобных скриншотов передавать ссылки на hoptoad (где также видно, сколько раз встречалась ошибка, когда последний раз и т.п.)

Чего не хватает? Ссылки на Hoptoad прямо со страницы ошибки, конечно!

UPD: Чтоб появились ссылки, нужно стянуть с гитхаба патченный файл vendor/plugins/hoptoad_notifier/lib/templates/rescue.erb и подложить в проект.

Теперь каждое сообщение об ошибке на staging будет сопровождаться вот такой вот красной ссылкой прямо на ошибку:

 title=


Шесть комментариев. Напиши еще один
  1. 37e34edef02cf9122b87573cad8168c2 # 26 марта 2010 testboi.myopenid.com (testboi.myopenid.com) написал:

    Уиии!

  2. 8cbd31fea81477c4b353eb32209df69f # 26 марта 2010 FX Poster (blog.fxposter.org) написал:

    Гм. Ты наивен. :)

    еще нужно закоvментировать эти строки:

    <pre><code> if (this.initialized) {

      return;
    } else {
      this.initialized = true;
    }</code></pre>
    

    Добавить после строки
    <pre><code>var data = [];</code></pre>
    строку
    <pre><code>this.notice.environment_name = environment;</code></pre>

    И добавить параметр функции initialize:
    <pre><code>initialize: function(environment) {</code></pre>

    ;)

    1. 777894ea5153122bfa6b83f5bbf23622 # 26 марта 2010 Леонид Шевцов (автор) написал:

      Надо было дифф прогнать, да? :) Спасибо, чуть порефакторил и вылил на гитхаб.

  3. 8cbd31fea81477c4b353eb32209df69f # 26 марта 2010 FX Poster (blog.fxposter.org) написал:

    Раз уж на то пошло, вот тебе подсказка. :)

    Форкни <a href=«http://github.com/thoughtbot/hoptoad_notifier» rel=«nofollow»>Hoptoad Notifier</a> и поменяй файл там, по крайней мере можно будет этим делом управлять.

    1. 777894ea5153122bfa6b83f5bbf23622 # 26 марта 2010 Леонид Шевцов (автор) написал:

      Да ну, ради одного файла?

  4. 8cbd31fea81477c4b353eb32209df69f # 26 марта 2010 FX Poster (blog.fxposter.org) написал:

    Дело не только в одном файле. Дело в том, что мы таким образом сможем, в частности, еще и обновлять этот плагин, используя уже твой репозитарий.

(нужна разметка?)

  • **жирный**
  • > цитата

отменить