Haml nie wyświetla Stack Trace

Ponieważ jest to mój pierwszy post - na wstępie witam wszystkich.

Mój problem jest następujący - wczoraj rozpocząłem przygodę z Haml (w Railsach programuje od roku). Ten system szablonowy jest zaiste bardzo ładny i można szybko się go nauczyć, ale natrafiłem na jeden poważny problem, który właściwie go dyskwalifikuje - w przypadku wystąpienia wyjątku, nie jest wyświetlany StackTrace. Czasem nawet żaden komunikat się nie pojawia, tylko pusta strona.

Nie wiem, czy to specyfika Haml’a, czy coś jest nie tak z moimi Railsami. W każdym razie w Rhtml wszystkie wyjątki są pięknie prezentowane (oczywiście w trybie development).

Jeśli chodzi o szczegóły konfiguracji, to używam Rails 1.2.3 oraz Haml 1.7.1

Z góry dzięki za pomoc.

Wygląda na to, że coś jednak jest nie tak z Railsami - kiedy w pliku konfiguracyjnym
wybieram wcześniejszą wersję railsów (RAILS_GEM_VERSION = ‘1.1.6’), to błędy
wyświetlane są całkiem sensownie (tzn. razem ze StackTracem, fragmentem kodu, w którym
prawdopodobnie wystąpił błąd, etc.).

Dodam, że projekt, w którym pojawia się ten problem, był tworzony w Railsach 1.1.6, a teraz chcę go przenieść do 1.2.3 - może gdzieś w konfiguracji coś jest nie tak?

Czy ktoś ma jakiś pomysł jak to naprawić?

Spróbuj założyć nowy projekt korzystając z wersjie 1.2.3 railsów i zobacz czy w takim nowo utworzonym projekcie też nie widzisz stack traca.

Też o tym pomyślałem :slight_smile: Założyłem nowy projekt i w nim wszystko wydaje się działać poprawnie.

Błąd zatem musi być albo w którymś z plików wygenerowanych przez poprzednią wersję railsów albo w jakimś pluginie (poza hamlem używam acts_as_rateable, acts_as_sluggable, file_column, login_system oraz ym4r_gm). Niektóre z nich nieco nieświeże - może powinienem zrobić jakiś update.

Jeśli macie jakieś dalsze sugestie, to będę wdzięczny. Tak, czy owak - dzięki za wsparcie :slight_smile:

Raczej to jedna z tych sytuacji, w której sam musisz znaleźć powód błędu :wink: (jest na tyle nietypowa, że mało prawdopodobne by ktoś inny spotkał się z tym wcześniej). Ja bym zrobił tak:
-założyć nowy projekt w railsach (już na nowej wersji 1.2.3), zainstalować plugin haml
(sprawdzamy czy stack trace działa…)
-skopiowanie konfiguracji (environment.rb itp)
(sprawdzamy czy stack trace działa…)
-kontrolery, modele, baza, /lib
(sprawdzamy czy stack trace działa…)
-pluginy (bardzo duża szansa że to właśnie przez nie nie działa)
(sprawdzamy czy stack trace działa…)

Generalnie musisz to rozbić na kroki, każdy z nich stanowiący jakąś logiczną całość. Działaj i raportuj z frontu ;).

Bingo - błąd tkwił w config.rb. Dzięki za pomocne sugestie - zmotywowały mnie do pracy przez weekend.

A sam błąd jest odległy od Hamla o całe lata świetlne i jest chyba też ważną przestrogą,
dla osób modyfikujących wbudowane klasy… przynajmniej ja trzy razy zastanowię się nad
tym, zanim to zrobię następnym razem.

Konkretnie - w config.rb miałem 5 niewinnych linijek:

class Array def sum inject(0) { |n, value| n + value } end end
Railsy 1.1.6 nie rozszerzały klasy Array o metodę sum, więc sam ją sobie dodałem. Nie wiedziałem, że została ona dodana w ActiveSupport Railsów 1.2.3 do modułu Enumerable. Moja implementacja gryzła się niestety z implementacją Railsów:

def sum(identity = 0, &block) return identity unless size > 0 if block_given? map(&block).sum else inject { |sum, element| sum + element } end end
która najwyraźniej wykorzystywana jest przy wyświetlaniu Stack Trace’a. Kto by pomyślał…