Jak wywalić generowanie helperów dla resource'ów?

Implementacja REST w railsach od strony generowania metod zwracających ścieżki do różnych akcji i resource’ów to jeden wielki epic fail.

Mając aplikację z dość dużą liczbą resource’ów (40-50) generuje się ok 600-700 helperów do urli (7 dla każdego resource’a + 2 wersje: path i url). Aplikacja z tak dużym plikiem routes.rb zajmuje 20-30 mega więcej pamięci i odpala się potwornie wolno (kilka sekund na dość szybkim serwerze). W trybie development już właściwie nie da się pracować - za każdym requestem routesy się generują od początku.

Częściowym rozwiązaniem są opcje :only i :except dla map.resources, dzięki którym można ograniczyć liczbę wygenerowanych metod. Daje to lekką poprawę, ale na dłuższą metę jest niewygodne, a liczba generowanych metod dalej jest ogromna.

Dobrze jest to rozwiązane w merbie, zamiast tysiąca metod w stylu:

  new_user_comment_path(@user, @comment)

jest jesdna:

  resource(@user, @comment, :new)

Najchętniej wymieniłbym router railsowy na ten z merba, ale na to trzeba będzie jeszcze trochę poczekać, więc zostaje przepisanie części, która generuje helpery, na ową jedną metodę.

Istnieje jakiś plugin, który udostępnia taki feature?

tutaj się próbują mierzyć z czymś takim:

http://github.com/jeremymcanally/krauter/tree/master

a tutaj obszerniej pisze o zamierzeniach:

http://omgbloglol.com/lots-of-work-a-new-router-for

nie wiem czy o to Ci chodziło. w sumie interesujący temat
:slight_smile:

Bardziej mi chodziło o zastąpienie samej metody generującej w obecnym routerze, ale jeżeli Krauter sobie poradzi z wszystkim czego potrzebuję, w routes.rb, to czemu nie? :slight_smile:

Dzięki za linka.

mam prośbę. byłbym wdzięczny jeśli opiszesz mi jak to rozwiązałeś jak rozwiążesz. gdy słyszę “mniej ramu” to automatycznie mnie to interesuje :wink:

ciekawostka:

merb routing in rails 2.2.2:
http://github.com/hungrymachine/merb_routing/tree/master

skoczyło mi z rps 2.30 na 7.50 :slight_smile: ale w ramie nie widzę różnicy

edit: błąd, żadnej różnicy nie zauważyłem… poza tym ze z merb_routerem zżera 10 mb więcej

Jak będę miał trochę więcej czasu to na pewno sprawdzę, wielkie dzięki za linka :slight_smile:

Co do ramu, to dziwne strasznie, jak wyrzuciłem zawartość routesów railsowych to jedna instancja zajmowałą ok. 20-25mb mniej (aczkolwiek jest tam bardzo dużo resource’ów). Dużo miałeś resource’ów w routes.rb?

możliwe, że będzie pracował lepiej (jak piszą na blogu) przy dużych ilościach resource. dla testów zrobiłem tylko dwa :slight_smile: