Przejdź do głównej zawartości

Ruby on Rails i klaster po indiańsku ;-)

Zacznę od tego, że winienem wszystkim, którzy czytali mój tutorial o początkach pracy z JRuby on Rails, kilka wyjaśnień. Trochę już napisałem we wcześniejszych postach, więc tutaj tematykę rozwinę (o ile mi się uda ją rozwinąć).

Otóż zrezygnowałem z Ruby'ego implementowanego na platformie Java nie dlatego, że okazał się do bani, lecz z zupełnie innego powodu. Otóż pracując z JRuby on Rails niejednokrotnie borykałem się z problemem niekompatybilności różnych wersji gemów (głównie rack, ale i innych paczek) a to z potężnym Glassfishem, a to z jego wersją deweloperską, stworzoną specjalnie do pisania i testowania aplikacji JRoR (glassfish-gem). Pomijam oczywiście fakt, że musiałem ciągle używać JRE/JDK w wersji 1.6.0_17, podczas gdy mamy już 1.6.0_21... Ale na nowszych Glassfish 3.0 (takiego używałem) padał na kolana. Przynajmniej u mnie, ale z tego, co czytałem, nie byłem jedynym użytkownikiem z tym problemem. Wszystko to przekładało się na konieczność testowania każdej istniejącej aplikacji po uaktualnieniu Rails i innych składników, ale jakoś sobie radziłem. Kolejny element to zmiana platformy roboczej - przeszedłem na Linuksa, a w związku z tym zamieniłem świetny SQL Server 2008 na MySQL (głównie ze względu na popularność tego ostatniego). Mogłem pozostać przy SQL Serverze, ale wiązało by się to z pracą z systemem Windows na maszynie wirtualnej, co raczej nie jest wygodne, jeśli nie jest konieczne :-) Owszem, w Linuksie wszystko działa, ale oprócz potężnego Glassfisha, jednego z najlepszych serwerów w swojej klasie, mamy do dyspozycji dużo lżejszego apache'a, który - w połączeniu z mongrelem - bardzo sprawnie serwuje aplikacje RoR. No i jest najpopularniejszym serwerem WWW. Tym bardziej zacząłem skłaniać się ku serwerowi apache, że Glassfish w środowisku produkcyjnym ma sens jedynie w przypadku, gdy jest optymalnie wykorzystany (J2EE!), a nie tylko do obsługi serwisów JRoR. Stąd, mając na uwadze oszczędność mocy i nie wytaczanie działa przeciwko pchle, zmieniłem zaplecze na natywnego Ruby, serwer mongrel z pakietem mongrel_cluster i starego, poczciwego apacza.

Jednak dwóch rzeczy nie zmieniłem na pewno:
  • po pierwsze zdania na temat JRuby on Rails i serwera Glassfish (tzn. że są świetnymi narzędziami); pod warunkiem, że - jak pisałem wyżej - Glassfish nie jest "stawiany" tylko dla aplikacji JRoR;
  • po drugie środowiska programistycznego - nadal pracuję w NetBeans (teraz w wersji 6.9.1).

To tyle w temacie nagłej "zmiany światopoglądu" :-)

A teraz wracam do wątku zasadniczego.


Napisałem sobie na próbę aplikację Rails, która ma mi pomóc w pracy (prezentuje informację o sprawozdaniach z ćwiczeń i uczniach, którzy już je oddali, ocenach itd. itd.). Oczywiście w nowym środowisku (Ruby 1.9, Rails 2.3.9, mongrel 1.2.0.pre2, mongrel_cluster 1.0.6, MySQL, apache). I tak: z poziomu NetBeans, jak i za pomocą polecenia script/server wszystko działało idealnie. No, może nie do końca - brakowało polskich znaków, więc:
  • skonfigurowałem MySQL do obsługi kodowania UTF-8 (Google i podręczniki do MySQL online)
  • zainstalowałem gema magic_encoding, za pomocą którego dodałem komentarz (podobny do tego w Pythonie) na początku każdego z plików źródłowych aplikacji informujący o zastosowanym kodowaniu ("# -*- encoding: utf-8 -*-")
OK, polskie znaki ruszyły. Potem nadszedł czas na wdrożenie aplikacji w środowisku produkcyjnym. Nie będę opisywał przygód po kolei, ważne, że się udało. Ale:
  • oczywiście przeczytałem instrukcję, co i jak zrobić (np. tutaj)
  • dodałem parę "łatek" na sterownik dla MySQL (link) i dla mongrela (dyskusja, link, plik mongrel.rb musi być skopiowany do katalogu config/initializers aplikacji)
  • napisałem własny skrypt uruchomieniowy i podpiąłem pod odpowiednie /etc/rcX.d (link)
  • a potem (bo przecież nie zadziałało...) dopisałem dwie linie w pliku config/environments.rb mojej aplikacji:
Encoding.default_external="UTF-8"
Encoding.default_internal="UTF-8"
  • w międzyczasie kilkukrotnie restartowałem system, bo - wyobraźcie sobie - po zrestartowaniu samego mongrela i klastra wszystko zawsze działało, a po restarcie systemu już nie (można by znaleźć rozwiązanie, ale mi się nie chciało)... 
  • ile się naprzeklinałem, to moje ;-)
W każdym razie od wczoraj aplikacja wymiata. Tym samym doszedłem dokładnie do tego punktu, w którym byłem używając Glassfisha i JRoR z tym, że proces uruchamiania serwerów i samej aplikacji jest teraz dużo krótszy, no i nie ma strat mocy :-) No i (2) jest bardziej linuksowo, a o to przecież chodziło.

O dodatkach, które musiałem zastosować, żeby aplikacja produkcyjna ruszyła, napisałem głównie dla tych, którzy czytali mój tutorial i chcieliby równie łatwo wdrażać aplikacje w natywnym Ruby on Rails na apache'u, jak w JRuby on Rails na Glassfishu. I żeby nie musieli szukać zbytnio, choć wujek Google jest szalenie cierpliwy :-)

Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany.
Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Android i zewnętrzny moduł GPS

Od kilku dni jestem w posiadaniu smyrfona z Androidem 4.1.1 na pokładzie. Kwestie związane z wyborem systemu roztrząsałem już na G+, a ten artykuł tutaj ma konkretny temat, więc nie będę wyjaśniał po raz n-ty. Po prostu zwyciężyły popularność i ekosystem oraz przywiązanie do produktów sieciowych Google. Mniejsza.

Zbliża się sezon urlopowy :-) Moi podopieczni już mają wakacje, a ja wyjeżdżam wkrótce. W każdym bądź razie wakacje to podróże - samochodem, rowerem, na piechotę, żaglówką, motorówką, samolotem... Zaawansowane urządzenia mobilne przyzwyczaiły nas już do usług lokalizacyjnych, z których najważniejszą jest GPS (na dalszym planie mamy A-GPS, lokalizacje w oparciu o sieci WiFi itp.). Często korzystamy z programów, które w coraz ciekawszy sposób wiążą naszą lokalizację, pobraną z np. GPS-a, z przeróżnymi danymi, nieraz ocierając się o AR.
Każdy współczesny smartfon, a przynajmniej znakomita ich większość, wyposażona jest we wbudowany odbiornik sygnału lokalizacyjnego (GPS, GLONASS…

Po co mi to całe Arduino?

Oczywiście tytuł ma być jedynie prowokacją. Chociaż nie do końca - artykuł jest właśnie poświęcony pracy w Arduino IDE z mikrokontrolerami, ale bez płytek Arduino.
Czym jest Arduino - wiemy wszyscy, zarówno początkujący fani programowania elektroniki, jak i zaawansowani mikrokontrolerowcy. Jeśli jednak nie do końca wiemy, zachęcam do odwiedzenia strony domowej projektu (link 5 na końcu artykułu) oraz zerknięcia np. w poradnik (link 4).

Jakiś czas temu, przełamując się i zmieniając zdanie ("o 180 stopni" ;-)) nabyłem sobie Arduino Leonardo, głównie w celu jego "obwąchania" i zapoznania się z bogatym zbiorem bibliotek dostępnych dla tej platformy. Zgoda, różne biblioteki są dostępne niezależnie od Arduino, ale i tak się zdecydowałem. Dlaczego Leonardo? Otóż miałem ochotę przyrządzić dwie pieczenie na jednym ogniu - mieć Arduino i przetestować ATmegę 32u4. Dziś doskonale zdaję sobie sprawę, że żeby pobawić się Arduino nie trzeba go w ogóle posiadać... Ale po kolei.

Pi…