środa, 10 marca 2010

JRuby on Rails + NetBeans + GlassFish +… Microsoft SQL Server 2008 (cz.2)

W tej części tutoriala przygotujemy do pracy serwer baz danych, utworzymy w nim konto użytkownika, za pomocą którego wygenerujemy odpowiednie bazy danych - wykorzystamy je dalej przy tworzeniu przykładowej aplikacji Rails. Następnie "zmusimy" środowisko NetBeans do współpracy z SQL Serverem poprzez interfejs JDBC, wygenerujemy przykładową aplikację Rails i sprawdzimy, jak sobie radzi pod kontrolą serwera testowego GlassfishGem.

Najpierw krótkie przypomnienie. Aplikacja railsowska potrzebuje trzech baz danych:

  • trybu tworzenia aplikacji (development);
  • trybu testowania aplikacji (test);
  • trybu produkcyjnego (wersja końcowa - production)

Pierwsza z nich przeznaczona jest do celów developerskich - cechują tę bazę częste zmiany, migracje i ich cofanie oraz przeładowywanie związanych z nią obiektów przy każdym odwołaniu do aplikacji.
Druga, jak sama nazwa wskazuje, przeznaczona jest do testów aplikacji, natomiast trzecia wykorzystywana będzie w przypadku właściwego uruchomienia aplikacji w środowisku produkcyjnym.

Tak, jak obiecałem w części pierwszej, nie będę tutaj wyłuszczał teorii na temat Ruby on Rails, MVC itd. Wszystkie te informacje zostały potraktowane w sposób wyczerpujący w odpowiednich publikacjach.

Spróbujemy teraz utworzyć trzy bazy danych dla naszej aplikacji.

Najpierw jednak musimy utworzyć konto użytkownika SQL Servera dla aplikacji Rails - musi to być, przynajmniej na czas budowy aplikacji, konto z wysokimi uprawnieniami, jednak szczerze odradzałbym iść na łatwiznę (patrz tutoriale o Ruby on Rails z MySQL'em) i używać wbudowanego konta administratora (sa). W naszym kursie konto użytkownika SQL Servera będzie nosiło nazwę rails_app i tak samo będzie brzmiało hasło. Konto założymy logując się do SQL Servera za pomocą Microsoft SQL Server Management Studio, oczywiście korzystając z istniejącego konta użytkownika o uprawnieniach pozwalających na tworzenie kont (może to być właśnie sa). Z poziomu Object Explorera, w drzewku naszego serwera baz danych rozwijamy gałąź Security, klikamy prawym przyciskiem myszy Logins i wybieramy opcję New login. W okienku, które ukazało się właśnie naszym oczom, na zakładce General ustalamy nazwę użytkownika (rails_app), zaznaczamy opcję SQL Server authentication i odznaczamy Enforce password policy. Podajemy dwukrotnie hasło (rails_app) i przechodzimy na zakładkę Server Roles. Tam zaznaczamy rolę dbcreator, klikamy OK i... konto użytkownika utworzone.
Aby się przekonać, że nasze konto rails_app nadaje się do czegokolwiek, wylogujmy się z SQL Servera i zalogujmy ponownie, używając tegoż właśnie konta. Udało się? Jeśli tak, to w porządku.

Ponieważ nasz nowy użytkownik posiada uprawnienia do tworzenia baz danych, bez większych problemów możemy utworzyć owe trzy bazy potrzebne naszemu projektowi. Klikamy zatem prawym przyciskiem myszy w węzeł Databases (Object Explorer; cały czas pracujemy w Microsoft SQL Server Management Studio), wybieramy New database... i podajemy nazwę simple_development. Zatwierdzamy klikając OK i pierwsza baza danych utworzona. Podobnie postępujemy tworząc bazy danych simple_testsimple_production. Słowo "simple" to nazwa właściwa naszej bazy danych, związana ściśle z nazwą aplikacji, którą utworzymy za moment. I oczywiście słowo to oddaje precyzyjnie istotę naszej aplikacji ;-)

Jeśli nie wystąpiły żadne problemy z tworzeniem baz danych, możemy się wylogować i zakończyć Microsoft SQL Server Management Studio.

Teraz do gry wchodzi NetBeans. Po uruchomieniu środowiska musimy zapewnić naszej aplikacji (i innym, tworzonym w przyszłości) dostęp do baz danych serwowanych przez SQL Server wykorzystując interfejs JDBC. W tym celu musimy zaopatrzyć się w odpowiedni sterownik, którego lokalizację podałem w części pierwszej tutoriala. Sterownik JDBC dla SQL Servera dostarczany jest jako archiwum ZIP, więc musimy je rozpakować. Zawartość archiwum umieszczamy w jakimś łatwo dostępnym folderze i przechodzimy do okna głównego NetBeans. Tutaj, w panelu Services rozwijamy węzeł Databases i klikamy prawym przyciskiem myszy podwęzeł Drivers. Domyślnie oczywiście nie ma sterownika dla SQL Server, więc wybieramy jedyną dostępną opcję, czyli New driver... W okienku New JDBC driver dodajemy (Add...) plik sqljdbc4.jar i klikamy OK, zgadzając się na domyślną nazwę - jak pokazano na obrazku poniżej.

I to wszystko - teraz każda aplikacja tworzona w NetBeans będzie mogła swobodnie korzystać z baz danych SQL Servera.

Utwórzmy więc projekt naszej aplikacji. Z menu File okna głównego NetBeans wybieramy opcję New project... i w okienku, które się wyświetliło, odnajdujemy kategorię Ruby i wybieramy w niej typ projektu Ruby on Rails Application.

Po kliknięciu Next (Następny) wybieramy nazwę naszej aplikacji (SimpleApp), ustalamy jej lokalizację, wybieramy platformę Ruby (polecam wbudowaną platformę JRoR - tej "niezależnej" użyjemy podczas wdrażania) i serwer testowy, wykorzystywany podczas uruchamiania naszej aplikacji w procesie jej tworzenia - oczywiście Glassfish Gem.

Po przejściu do następnego kroku (Next) musimy skonfigurować bazy danych naszej aplikacji i sposób łączenia się z nimi. Po pierwsze, zaznaczamy opcję Access Database Using JDBC.

Zostawiamy zaznaczone pole Configure Using IDE Connections i z listy rozwijalnej skojarzonej z każdym z trzech rodzajów baz danych wybieramy pozycję New Database Connection...

Dla każdej z trzech baz danych naszej aplikacji musimy ustalić szczegóły połączenia. Poniższy obrazek pokazuje, co należy podać w okienku połączenia dla bazy simple_development (analogicznie postępujemy w przypadku pozostałych baz):

Oczywiście nazwa hosta powinna być właściwa dla konfiguracji Waszych komputerów. Nazwę użytkownika i hasło ustaliliśmy wcześniej. Jeśli ktoś używa SQL Servera w wersji Express, to konieczne będzie wypełnienie pola nazwy instancji, np. SQLEXPRESS, chyba, że zainstalowano serwer jako tzw. instancję domyślną.

Po kliknięciu OK, jeśli wszystko będzie w porządku, czyli NetBeans nawiąże połączenie z SQL Serverem, będziemy musieli wybrać na zakładce Advanced odpowiedni schemat - sugeruję dbo.

Klikamy OK i połączenie zostaje dodane do środowiska.

Mamy więc przygotowane dla naszej aplikacji bazy danych i wiemy, jak się z nimi łączyć - automatycznie wracamy do okienka konfiguracji baz danych i możemy przechodzić dalej.

Ostatnie okno pozwala nam wybrać jedną z dostępnych wersji Rails - proponuję najnowszą, jaką mamy.

Klikamy Zakończ i w napięciu oczekujemy, aż środowisko wygeneruje nam projekt wstępny naszej aplikacji. Po upływie określonego czasu, silnie zależnego od mocy obliczeniowej naszego komputera, środowisko NetBeans ukaże nam się w pełnej krasie, zachęcając do twórczej pracy, wspieranej przez JRuby on Rails :-)

Zwykle NetBeans na "dzień dobry" prezentuje nam zawartość pliku database.yml - widzimy, jak misternie wyplecione jest nasze połączenie z bazami danych.

No ok, sprawdźmy więc, czy nasza aplikacja jest prawdziwą aplikacją JRoR. Najprościej przekonamy się o tym, gdy ją uruchomimy (serwer + klient, czyli przeglądarka WWW). Kliknijmy więc prawym przyciskiem myszy nazwę naszej aplikacji w panelu Projects i wybierzmy polecenie Run. Po chwili (uwaga na temat czasu - patrz wyżej) uruchomiona zostanie nasza domyślna przeglądarka, w której Rails powitają nas serdecznie:

Jednak to nam nie wystarczy. Kliknijmy w link About your application's environment. Jeśli zobaczymy jakikolwiek komunikat o błędzie, musimy sprawdzić, czy jest wszystko w porządku ze środowiskiem i jego składnikami (głównie JRuby i Rails oraz sterownik JDBC). W przeciwnym wypadku otrzymamy piękny zestaw informacji:

...i możemy z niecierpliwością wyczekiwać następnej części tutoriala, w której wgryziemy się głębiej w naszą aplikację oraz wdrożymy ją w środowisku produkcyjnym.