Czego użyć do …?

Młodzi programiści często stają przed problemem jakiego gemu użyć do rozwiązania danego problemu. Praktycznie do wszystkiego znajdziemy po kilka narzędzi, a małe obeznanie z Railsowym środowiskiem sprawia, że wybór jest trudny i może być dziełem przypadku. Dlatego przygotowałem tę listę. Nie chcę pokazywać wszystkich możliwości. Chcę pokazać jedną z popularniejszych (często najpopularniejszą), najaktywniej rozwijaną. Jeśli kilka bibliotek jest porównywalnych, to wybór jest czysto subiektywny. Jednym słowem chcę ograniczyć wybór. Poniższe gemy zostały wielokrotnie użyte w środowisku produkcyjnym i jeśli nie wiesz co wybrać wybierz właśnie je. Nie gwarantuje, że jest to najlepszy wybór, ale na pewno jest to wybór dobry.

Jak samemu znaleźć właściwy gem?

Całkiem pokaźna lista kategorii i rozwiązań jest zgromadzona na ruby-toolbox.com. Warto zwrócić uwagę na liczbę osób, które danego rozwiązania używają. Przy szukaniu odpowiedniego gemu warto kierować się:

  • dostępnymi funkcjami – nie wymaga komentarza.
  • dokumentacją – nawet najlepszy gem będzie na nic, jeśli nie będziemy potrafili z niego skorzystać. Chociaż w ostateczności można zawsze zajrzeć do kodu.
  • jakoś kodu (testy) – im ważniejsza jest dla nas jakaś biblioteka, tym ważniejsze jest, by przyjrzeć się jak jest napisana. Pozwoli nam to zorientować się, czy można twórcom zaufać i czy będziemy w stanie coś w niej poprawić lub zmienić, gdy zajdzie taka potrzeba.
  • rozszerzalność – jak wyżej.
  • czy projekt żyje – głupio by było, gdyby się okazało, że rozwój użytego gemu zatrzymał się wiele miesięcy temu. Bardzo ważna jest możliwość otrzymania pomocy, gdy znajdziemy bug, lub będziemy mieli z czymś problem.

Zawsze można również zadać pytanie na blipie z tagiem #ruby lub forum.

Uwierzytelnianie

Devise jest obecnie najprostszym rozwiązaniem, jego jedyną wadą (zaletą?) jest to, że bardzo dynamicznie się zmienia.

Wyszukiwanie

Thinking Sphinx. Kropka.

Przechowywanie plików i obrazków

Paperclip. Warto zajrzeć również do innych projektów ze stajni thoughtbot, bo są to zawsze produkcje warte polecenia.

Testowanie

Użyj Rspeca, Cucumbera i Capybary. Ponieważ można ten zestaw uznać za standardowy, warto się nimi pobawić i ewentualnie dopiero gdy zauważymy jego wady, poszukać alternatywy. Warto się również zaprzyjaźnić z factory girl.

Layouty

Erb jest brzydki i passe. Haml jest ładny i dżezi.

Inherited resources

Kiedy już zostaniesz fanatykiem REST’u, dobrze zacząć się rozglądać za czymś w stylu Inherited Resources i zacząć pisać kontrolery w bardziej deklaratywnym stylu.

Continuous Integration

Chyba nikogo nie trzeba przekonywać do korzyści jakie daje CI. Najprościej postawić serwer continous integration można z użyciem Integrity.

Deploy

Mam nadzieję, że nie wrzucasz kodu na serwer poprzez FTP? Do tego służy Capistrano. I tyle w tym temacie.

Obsługa błędów

Instalacja Hoptoadapp sprowadza się do kilku komend, dzięki którym dostaniesz email z każdym błędem, który się pojawił na produkcji i jedno miejsce, w którym tymi błędami możesz zarządzać. Jeśli wystarczy Ci jeden użytkownik i projekt, to jest również plan darmowy.

Mierzenie wydajności

Sposób w jaki New Relic zbiera i prezentuje informacje o obciążeniu jest imponujący. Często jeden rzut oka wystarczy, by zorientować się, co powoduje problemy z wydajnością. W wersji podstawowej daje podgląd ostatnich 30 minut.

Serwer www

Użyj Nginxa z mod_rails. Zużywa trochę mniej zasobów niż Apache, jest banalny w instalacji i konfiguracji i napisany przez człowieka z naszej wschodniej granicy (w sumie północnej).

Paginacja

Na koniec niepodważalny kanon służący do paginacji: Will Paginate.

Na koniec

Jeśli uważasz że do czegoś istnieje lepsze rozwiązanie napisz w komentarzu (flame! flame!) A jeśli uważasz, że ta lista jest przydatna i myślisz, że warto, by było regularnie aktualizowana, to napisz tym bardziej.



Komentarze

  1. Jakub Kuźma 29.11.2010

    Comment Arrow

    > Mam nadzieję, że nie wrzucasz kodu na serwer poprzez FTP? Do tego służy Capistrano. I tyle w tym temacie.

    A co jeśli można to zrobić tylko poprzez FTP? Czego wtedy używasz?


  2. martinciu 29.11.2010


  3. lego 29.11.2010

    Comment Arrow

    @martinciu – „wyszukiwanie – https://github.com/mwmitchell/rsolr bo sphinx się nie skaluje” hehe, powiedz to chłopakom z FilesTube 🙂


  4. tjeden 29.11.2010

    Comment Arrow

    @Jakub

    Nie zdarza mi się być w takiej sytuacji 🙂 (jak mam coś małego, albo statycznego, to Heroku daje radę), pewnie robiłbym to przez rsync.

    To rozwiązanie wygląda na sensowne i jest oparte o capistrano (co prawda dość okrojone):
    http://stackoverflow.com/questions/327417/using-capistrano-to-deploy-a-non-rails-site-via-ftp


  5. Sławosz 30.11.2010


  6. Seban 30.11.2010

    Comment Arrow

    uwierzytelnianie: devise
    przechowywanie plikow: carrierwave (!!!)
    testowanie: shoulda + factory_firl
    + RVM
    + Sinatra
    + daemons
    + thin
    – inherited_resources


  7. Piotr Sarnacki 30.11.2010

    Comment Arrow

    Ja ostatnio porzucam cucumbera i rspeca na rzecz Test::Unit, może nawet napiszę o tym jakiegoś posta.


  8. Qertoip 1.12.2010

    Comment Arrow

    @Piotr Sarnacki: popieram! Ja też porzuciłem – na rzecz Shouldy, czyli Test::Unita z kontekstami.

    @martinciu: w moim doświadczeniu Sphinx „bardzo daje radę”. Pozostałe typy narzędzi ciekawe, dzięki za zwrócenie uwagi.


  9. zgryw 8.12.2010

    Comment Arrow

    @Qertoip, Shoulda ftw!

    Co do uploadu plików to albo wspomniany już https://github.com/jnicklas/carrierwave, albo wspaniały jeżeli chodzi o obrazki https://github.com/markevans/dragonfly


  10. Mich 2.01.2015

    Comment Arrow

    Temat i odpowiedzi jeszcze aktualne ?


  11. tjeden 2.01.2015

    Comment Arrow

    @Mich

    W sumie uzwględniając komentarz tak. Hoptoadapp zmienił nazwę na airbrake, a do CI najlepiej użyć http://jenkins-ci.org/node.




O autorze

Aleksander Dąbrowski

Od 2008 zawodowo programuje w Ruby i Railsach. Jest maniakiem prostych i eleganckich rozwiązań, nie boi się usuwania brzydkiego kodu. Uwielbia dzielić się wiedzą, a w wolnych chwilach naprawia samochody.