Debugowanie Merba w Netbeans
Opublikowane przez Jarosław Zabiełło
Po paru godzinach walki z Netbeans, przeglądaniem źródeł, przekopywaniem list dyskusyjnych i zgłoszonym tickecie, w końcu udało mi się zmusić Merba do pracy z Netbeans. Mam też dobrą wiadomość, że Netbeans 7 (wersja trunk) w przyszłym tygodniu ma mieć dodane wsparcie do Merba (tworzenie projektów, debugowanie itp). Dla tych, co chcieliby już teraz móc debugować swoje projekty Merba w graficznym, ślicznym debugerze Netbeans, podaję instrukcję obsługi. :)
Krok 1: trzeba ściagnąć najnowszą wersję trunk ze strony http://bits.netbeans.org/download/trunk/nightly/latest/.
Od niedawna Netbeans posiada możliwość podpięcia swojego debugera do dowolnego kodu Ruby’ego za pomocą tzw. remote debugging (zobacz wpis w blogu Martin Krauskopfa z 11 listopada 2008 Remote Debugging: explore Ruby code easily). Właśnie tej metody użyjemy aby zmusić Netbeansa do pracy z Merbem.
Krok 2: w swoim pliku config/init.rb musisz ustawić opcję wymuszającą uruchamianie Merba tak jak Rails (trzeba wyłączyć forkowanie ładowania klas):
Merb::Config.use do |c|
c[:fork_for_class_load] = false
# ... reszta ustawień
endKrok 3: musisz mieć zainstalowany gem ‘ruby-debug-ide’ i uruchomić zdalny nasłuch debuggera:
sudo gem install ruby-debug-ide
rdebug-ide -p 7000 `which merb`Nie ma znaczenia jaki port ustawisz dla projektu Merba z poziomu konfiguracji projektu (prawy click na nazwę projekty -> Properties). Jeśli chcesz uruchomić Merba na porcie 3000 to po prostu odpal nasłuch debuggera przez podanie dodatkowych opcji:
rdebug-ide -p 7000 `which merb` -p 3000Krok 4: Ustaw sobie w kodzie breakpoint, następnie podepnij debugger “menu -> Debug -> Attach Debugger…”

Nie używaj opcji “menu -> Debug -> Debug Main Project”. Nie ma ona tu znaczenia. Debugowanie odpala operacja przypisania debuggera.

Krok 5: Otwórz przeglądarke i uruchom projekt (http://localhost:4000)
Przełącz się na Netbeans. To wszystko.
Wbrew temu co piszą na Wiki do JRuby, nie ma potrzeby tworzenia pliku script/server zawierającego skopiowaną treść skryptu merb. Użytkownicy Windozy, którzy mają dostępu do komendy which, zamiast tego niech wpiszą po prostu merb, albo pełną ścieżkę do skryptu merb.



@JZ Masz małą literówkę w artykule – nie “Od niedawna Merb posiada możliwość podpięcia swojego debugera do dowolnego kodu Ruby’ego” tylko Netbeans ma taką możliwość.
Aż się zdziwiłem, że Merb może służyć do debugowania czegokolwiek innego :)
@Jiima: Już poprawiłem. Tekst powstał b. późno w nocy.
Metoda którą opisałem na wiki JRubiego jest jedną z możliwośći. Metoda którą opisałeś wymaga z kolei uruchamiania Merba metodą railsową (też czekam na NB 7 ze wsparciem Merba) i jest drugim workaroundem. Jak widać NB to bardzo elastyczne IDE. :}
@dmilith: właśnie problem w tym, że ta metoda z podstawieniem skryptu merba pod nazwą script/server (aby NB myślał że to Rails) w ogóle nie działa z nowym Merbem. To co opisałem wykorzystuje remote debugging dodany do NB7 i po prostu działa.