Archiwum dla 'RAILS' Kategoria

Programista Java w Rubylandzie, część 2. Pierwsza aplikacja.

01.12.2011

Ok, w poprzednim odcinku okazało się, że daje się zainstalować Rubyego i Railsy. Zobaczymy teraz, że nasz naiwny obraz Świata zostanie zburzony.

Będziemy chcieli utworzyć aplikację blog, taką samą, która jest w tutorialu Railsów na ich stronie, tyle, że działającą z normalną bazą danych, czyli w tym wypadku z Postgresem. Brzmi prosto? O nie, nie, nie. Może pod Linuksem albo MacOs-em idzie to normalnie, ale nie pod Windowsem.

Pierwsza rzecz to instalacja Postgresa. Lepiej się nie rzucać na wersję 9 (nie jest oficjalnie wspierana przez Rails – chyba nie jest), i nie należy dotykać się wersji 64 bit. Jeżeli ktoś nie lubi ćwiczeń w rodzaju podawanie w różnych, losowo wybranych miejscach ścieżki do Postgresa jako C:\Progra~1\PostgreSQL\8.4\bin to lepiej nie instalować Postgresa w Program Files tylko gdzieś, gdzie nie ma spacji w ścieżce.

Druga rzecz, to sterownik (czyli w ichniej terminologii, adapter) Rubyego do Postgresa. W Rubym instalacja jest tożsama z instalacją odpowiedniego gem-a. Wchodzimy więc na stronę wiki, żeby się dowiedzieć, jak się ten gem nazywa. I od razu człowiek się cieszy, bo ma do wyboru aż 4 adaptery. Prawda, że super?

Sytuacja się na szczęście upraszcza. Rozwijanie adaptera postgres znudziło się jego twórcą w 2008 roku. Jego następcą jest pg, który jest “natywnym” adapterem, który wymaga zainstalowania kawałka linuksa pod Windowsem.

Jest też postgres-pr, który jest adapterem napisanym tylko w Rubym, co wróży nędzną wydajność, ale powinno pozwolić uniknąć kłopotów z instalacją. Dodatkowo ostatnio ktoś się do niego dotykał w marcu 2009, co jest według autora wiki “sign of active development”. Zdaje się, że ostatnia wersja jest z grudnia 2009.

Jest jeszcze ruby-postgres, ale strona projektu wskazuje, że wszyscy jego deweloperzy zajęli się dawno czymś innym.

Najbardziej sensowną opcją jest użycie pg. Weźmy się więc za to.

Pierwsza rzecz, to adapter ten jest napisany w C (czyli jest “natywny”), w związku z tym pod Windowsem trzeba sobie zainstalować Developnent Kit. Instrukcję na tej stronie należy wykonać dokładnie, sprawdzając czy się gdzieś nie pomyliliśmy. Tutaj problemów nie napotkałem.

Następnie instalujemy gem pg: gem install pg? He, he, he. Takie rzeczy to tylko działają w tutorialach na stronie Railsów. To, co trzeba zrobić to:

gem install pg --platform=mswin32 --version=0.9.0 -- --with-pg=c:\programs\PostgreSQL\8.4\

Uwagi:

  1. mimo, że najnowszą wersją pg jest 0.10.0, to nie udało mi się z nią ruszyć, zresztą nie tylko mi,
  2. te dodatkowe dwa minusy za numerkiem wersji a przed --with-pg są potrzebne, to nie literówka,
  3. ukośnik na końcu ścieżki Postgresa też jest potrzebny.

Ja wiem, że niektórzy teraz przecierają oczy, że jakiś kawałem teoretycznie produkcyjnego kodu ma numer wersji 0.10, ale najwyraźniej tak jest.

Jak się wszystko poinstalowało, to możemy zająć się utworzeniem aplikacji.

Piszemy w konsoli
rails new c:\katalog\z\projektami\blog -d postgresql

Railsy generują gotowy do uruchomienia szkielet projektu. To znaczy niby on jest gotowy do uruchomienia, ale nie jest. Można się o tym łatwo przekonać wchodząc do utworzonego katalogu blog i pisząc w konsoli rails server.

Trzeba zrobić dwie rzeczy:

  • w pliku blog\config\database.yml podajemy poprawne ustawienia dla baz danych: Rails pracuje z trzema bazami: deweloperską, testową i produkcyjną (i bardzo słusznie) – trzeba ustawić poprawnie nazwę użytkownika, nazwę bazy, itp,
  • w pliku blog\Gemfile poprawiamy gem 'pg' na gem 'pg', '0.9.0', w innym przypadku Rails sobie doinstaluje sam najnowszą wersję pg, która nie chciała mi działać.

Uff teraz piszemy w konsoli, w katalogu projektu, bundle install, a następnie rails server i na http://localhost:3000 powinna się pojawić strona powitalne naszej aplikacji.

Póki co aplikacja nic nie robi, ale to już temat na kolejny wpis.

Programista Java w Rubylandzie, część 1. Początki.

01.11.2011

Ruby to podobno fajny, miły i przyjemny język programowania. Spędziłem trochę czasu na pisaniu aplikacji w Ruby-on-Rails (zdaje się 90% wszystkiego pisanego w Ruby jest aplikacją Ruby-on-Rails) i chciałbym się podzielić swoimi doświadczeniami. Także z samym sobą, jak bym musiał sobie coś za rok przypomnieć.

Zacznijmy od instalacji. Dla porządku: instaluję wersję Rails 3.0.3, jak się przekonamy nawet zmiana na wersję 3.0.4 może spowodować, że poniższą instrukcję będzie sobie można wsadzić w railsa. Takie tu panują zwyczaje.

Dodatkowo używam Windows 7 64 bit, warto od razu zaznaczyć, że nie ma sensu instalować czegokolwiek 64 bit. Ruby, Railsy itp. pod Windowsem żyją w świecie x86. Ale ogólnie, to instalacja na wszystkich platformach wygląda podobnie.

Zacznijmy wreszcie. Wchodzę na stronę http://rubyonrails.org/ i klikam dużą ikonę Get Started (wiadomo, Web 2.0, duże ikony, pastelowe kolorki).
Ruby ma całkiem sympatyczny instalator windowsowy. Od razu mają plus. Ale co ja widzę:

We recommend Ruby 1.8.7 or Ruby 1.9.2 for use with Rails. Ruby 1.8.6 and earlier are not supported, neither is version 1.9.1.

Ok, rozumiem, że wersja wcześniejsza niż 1.8.7 nie jest wspierana (w Open Source to norma), ale dlaczego wersja 1.9.1 nie jest wspierana, a 1.9.2 jest??? Jak się człowiek przyzwyczaja, że aplikacja napisana w Java 10 lat temu ruszy na Java 6 z 2010, to się może lekko zdziwić.

Następna rzecz to RubyGems, czyli taki sprytny menadżer pakietów. Coś jak Maven.

Download (extract, then run “ruby setup.rb”)

I co?

source_index.rb:62:in `installed_spec_directories’: undefined method `path’ for Gem:Module (NoMethodError)

No pięknie, jeszcze nic nie zacząłem robić, a już dostaję wyjątek, tfu, error. Szukam w googlu i okazuje się, że to wszystko moja wina. Przecież powinienem wyśledzić w changelogach itp. miejscach, że wersja 1.4.2 Rubygems nie współpracuje z Ruby 1.9.2. Oczywiście można wykonać szereg hakierskich sztuczek, odpowiednich upgradów i downgradów, żeby można było użyć… no dobrze, nie ważne.

RubyGems jest dostarczony z Ruby 1.9.2, więc można sobie krok instalacji Gems odpuścić. Nie to, żeby w instrukcji było to napisane.

Szukam programu gem w katalogu bin instalacji Rubyego i wpisuje magiczne gem install rails i czekam, czekam, czekam. Wreszcie, bez dalszych niespodzianek, wszystko się pięknie instaluje. W katalogu bin rubyego pojawia się program rails. Czas na test:

rails new c:\TRASH\testapp
cd c:\TRASH\testapp
rails server

Pierwsza linijka powoduje utworzenia szkieletu aplikacji (jak by ktoś nie wiedział, to Rails jest sprytnie wymyślonym generatorem aplikacji i frameworkiem Model-View-Controller w jednym – JBoss Seam, Grails, Spring Roo właśnie z tego rżnęli pomysły); trzecia linia uruchamia serwer WWW z gotową do działania aplikacją. To znaczy nie uruchamia, bo dostajemy

Could not find gem ’sqlite3-ruby (>= 0, runtime)’ in any of the gem sources listed in your Gemfile.
Try running `bundle install`.

Jak ktoś chce być cool i używać dżezi technologies, to się musi trochę napocić.

Może porada Try running `bundle install’ pomaga? Pomaga, jeżeli mamy zainstalowaną bazę sqlite. Ja nie mam i nie mam zamiaru mieć, więc poprzestańmy na tym, co mamy: jest Ruby, są Railsy, coś tam działa.

Konfiguracją normalnej bazy danych i odpaleniem prostego projektu zajmiemy się następnym razem. Dopiero wtedy zacznie się prawdziwa zabawa.