Jakiś czas temu opisywałem dostarczanie aplikacji dla lokalnej społeczności oraz wnioski ze współpracy z lokalną grupą. Dziś bardziej techniczny opis narzędzia do zarządzania lokalną grupą i jej spotkaniami. Udało mi się doprowadzić projekt do momentu w którym uznałem, że mogę opublikować kod źródłowy aplikacji i nie wstydzić się go. Opisywane narzędzie jest dostępne w publicznym repozytorium na Githubie.

Ruby on Rails

Technologie wykorzystane w projekcie

Za back-end aplikacji odpowiada framework Ruby On Rails. Jest to najlepiej znane mi rozwiązanie i jedno z najlepszych do prototypownia aplikacji w ogóle. Wiedziałem, że termin wdrożenie nie jest na tyle elastyczny, abym mógł pozwolić sobie na uczenie się jakieś technologii specjalnie na potrzeby projektu. Baza danych to PostgreSQL.

Użyłem gotowego rozwiązania do tworzenia kont użytkowników i ich autentykacji. Popularnego i sprawdzonego gemu Devise. Uniknięcie ręcznej implementacji całego systemu zaoszczędziło mi sporo czasu i niepotrzebnych luk w bezpieczeństwie. W aplikacji istnieją 3 różne role użytkowników i do zachowania ich unikalnych uprawnień użyłem gemu CanCan.

Moim celem byłe też zachowanie responsywności i czytelnego wyglądu narzędzia, bez spędzania wielu godzin nad front-endem, dlatego użyłem gotowych komponentów z frameworka Bootstrap. Uniknąłem dzięki temu tysięcy linii w CSS. Dostosowałem jedynie zachowanie poszczególnych elementów do moich potrzeb.

Realizacja projektu

Prace nad projektem szły bardzo sprawnie i gładko. Testowe wersje aplikacji udostępniałem w kontenerze na Heroku, a link i dane dostępowe przesyłałem odpowiednim osobą. Wdrażanie kolejnych wersji w ten sposób było tak samo łatwe jak wypuszczanie kolejnych commitów do repozytorium na Githubie.

Większym wyzwaniem było zaimplementowanie systemu wymiany wiadomości między użytkownikami, wewnątrz aplikacji. Na szczęście znalazłem elastyczne rozwiązanie, jakim okazał się gem Mailboxer, z którego zaczerpnąłem pewne funkcjonalności i dostosowałem je do potrzeb projektu.

Kolejnym aspektem było przechowywanie plików PDF. Do tego celu użyłem gemu Paperclip. Aktualnie pliki są przechowywane na dysku twardym serwera, natomiast planuję umożliwienie integracji z Amazon AWS.

Do testowania wykorzystałem framework Rspec. Tworzenie danych testowych zapenił mi gem Faker oraz Factory Girl Rails. Odkryłem też jak przydatny jest gem Shoulda Matchers w przypadku testowania modeli. Testy zajmujące kilkadziesiąt linijek udało mi się skrócić do kilkunastu, przy zachowaniu czytelności kodu.

Ostateczną wersję aplikacji musiałem wdrożyć na VPS z zainstalowanym Linuxem Ubuntu Server 16.04. Do wdrożenia posłużyłem się Capistrano i bardzo zaskoczył mnie łatwością konfiguracji oraz obsługi. Aczkolwiek przeniesienie się z Heroku na własny serwer wymagało pewnych zmian w całym projekcie.

Aktualnie aplikacja obsługuje:

  • Zarządzanie członkami grupy – dodawanie nowych, usuwanie, resetowanie haseł, zmienianie ról.
  • Dodawanie aktualności w formie bloga.
  • Wymianę wiadomości między użytkowaniami w postaci konwersacji.
  • Przyznawania członka grupy punktów na podstawie wcześniej ustalonych kategorii.
  • Terminarz spotkań.
  • Wymienianie się notatkami w postaci plików PDF.
  • W przyszłości chciałbym też zaimplementować możliwość komentowania postów i wydarzeń.
  • Nadal zostało kilka rzeczy do zrobienia, które opisałem w pliku readme. Na moment obecny jestem zadowolony z działania aplikacji i łatwości dodawania kolejnych funkcjonalności. W razie potrzeby mogę szybko naprawić wykryte błędy i wdrożyć od razu na serwer produkcyjny. A gdybym coś zepsuł to mogę szybko zrobić rollback do poprzedniej wersji.

    To tyle jeśli chodzi o techniczny opis projektu. Zostawiam link do repozytorium i życzę udanego dnia.