Debugowanie w Ruby on Rails

Czasami w aplikacjach railsowych zdarzają się błędy które trudno wychwycić gołym okiem, bądź znaleźć w logach. Co wtedy zrobić? Na szczęście programiści Ruby on Rails wymyślili narzędzie, które pomaga debugować aplikację w różnych punktach napisanego przez nas kodu.

Biblioteka breakpoint bo o niej tu mowa, umożliwia zatrzymanie wykonywania kodu i przejście do interaktywnej sesji ruby(irb). Jak z tego skorzystać? Wystarczy w dowolnym miejscu swojego kodu wstawić breakpoint, a następnie w konsoli(w głównym katalogu naszej aplikacji Rails) wpisać: ruby script/breakpointer.

Powinno pojawić się coś takiego:

No connection to breakpoint service at druby://localhost:42531 (DRb::DRbConnError)
Tries to connect will be made every 2 seconds…

Załóżmy, że mamy kontroler users oraz akcję create:

class UsersController < ApplicationController
    def create
        @user = User.new(params[:user])
        breakpoint
        @user.created_at = Time.now
        @user.save
    end
end

Teraz w przeglądarce wywołajmy akcję create dla kontrolera users. Przetwarzanie kodu zatrzyma się w miejscu ustawienia breakpointa i uruchomiona zostanie irb(dzięki skryptowi breakpointer). Od tego momentu możemy testować, sprawdzać oraz debugować nasz kod. Kiedy znajdziemy błąd i zechcemy opuścić konsolę wpisujemy exit. Sesja irb zostanie zatrzymana i zostanie wywołana dalsza część skryptu.

Więcej informacji na temat debugowania można znaleźć na stronie wiki projektu Ruby on Rails.

Zamiast biblioteki breakepointer zaleca się używanie biblioteki Ruby-debug, która od wersji Rails 2.0 zastąpi w/w bibliotekę. Instalacja i użycie sprowadza się do kilku czynności

Instalacja biblioteki:

# gem install ruby-debug

Edycja pliku config/environments/development.rb poprzez dodanie na końcu linijki:
require 'ruby-debug'

W kodzie zamiast breakpoint wpisujemy debugger.

Uruchamiamy serwer WebRick a następnie wywołujemy akcję w kontrolerze. W konsoli w której uruchomiliśmy WebRick'a uruchomiony zostanie irb. Konsolę opuszczamy podobnie jak w przypadku breakepoint'a używając słowa kluczowego exit.

Więcej na temat używania Ruby-debuggera na stronie wiki.

2 thoughts on “Debugowanie w Ruby on Rails

  1. A na głównej stronie pisze

    „Note: Breakpointer has pretty much been deprecated as far as I can tell (Rails Changeset 6611). Use Ruby Debug, as it is much more robust and should be incorporated into Rails 2.0. – Adam G.”

    A to dlatego, że breakpointer korzysta z buga Rubiego, który został wyeliminowany w nowej wersji interpretera.
    (można doczytać w http://www.sitepoint.com/article/debug-rails-app-ruby-debug)

    Zostaje albo ruby-debug, który daje Ci takie same możliwości jak breakpointer (opis w artykule).

    Albo..

    Super, megawypaśny debugger w netbeans, który pozwala na debugowanie aplikacji wprost w IDE. Jest to o wiele wygodniejsze od klepania w konsoli. Brakuje mu jeszcze takich ficzerów jak podmiana wartości zmiennych w czasie debugowanie, ale myślę, że to kwestia czasu (na razie są tylko do odczytu).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *