merb + db4o
29 lipca 2009Mini tutorial o tym jak skorzystać z obiektowej bazy db4o w merbie - takie małe proof of concept.
Wymagania & instalacja
- JRuby - Przykład instalacji można znaleźć na przykład w jednym z poprzednich postów
- db4o - .jar dostępny razem z rdb4o
- merb - gem install merb-core
- rdb4o
git clone git://github.com/teamon/rdb4o.git cd rdb4o rake install
- merbrdb4o
git clone git://github.com/teamon/merb_rdb4o.git cd merb_rdb4o rake jruby:install
Aplikacja
1. Wygenerowanie szkieletu aplikacji (core zamiast app - nie chcemy DataMapperowego syfu :P)
merb-gen core awesome
cd awesome
2. Konfiguracja
W pliku config/init.rb:
dependency "rdb4o" dependency "merb_rdb4o" use_orm :rdb4o
Można teraz spróbować uruchomić aplikacje. Wszystkie komendy trzeba poprzedzić jruby -S
jruby -S merb
Ale...
~ No database.yml file found in /Users/teamon/Desktop/rdb4o_test/config. ~ A sample file was created called database.sample.yml for you to copy and edit.</p>
Trzeba ustawić parametry bazy danych - w naszym przypadku domyślne ustawienia będą w sam raz - wystarczy zmienić nazwe pliku z database.yml.sample na database.yml
mv config/database.yml.sample config/database.yml (dla leniwych)</p>
Działa! (jeee...)
3. Test first!
Eeee... innym razem
4. Model
jruby -s merb-gen model Cat
Przydałoby się parę pól:
class Cat include Rdb4o::Model field :name, String field :age, Fixnum field :nice, Boolean end
db4o (jeszcze ;]) nie potrafi zapisać obiektów ruby więc trzeba wygenerować klasy javowe
jruby -S rake rdb4o:compile_models
Jeśli ktoś bardzo chce to może zobaczyć sobie app/models/java/Cat.java ale dla większości nie będzie to miły widok (fuj, Java)
Kto chce kotka?
jruby -S merb -i
>> Cat.create :name => "Kitty", :age => 1, :nice => true >> Cat.create :name => "Simba", :age => 5, :nice => false
(Polecam pobawić się z klasą Cat - streszczenie dostępnych opcji dostępne w README)
5. Szybki kontroller i widoczek
jruby -S merb-gen controller cats
app/controllers/cats.rb
class Cats < Application def index @cats = Cat.all render end end
app/views/cats/index.html.erb
<% @cats.each do |cat| %> <p><%= cat.name %>, <%= cat.age %>, <%= cat.nice? %></p> <% end %></p>
Odpalamy (jruby -S merb), wchodzimy na http://localhost:4000 i widzimy listę zwierzaków - awesome.
To by było na tyle z mini-tutka. Wniosek jest jeden - działa ;]. Jeśli komuś java zjada właśnie 90% cpu to tylko ze względu na opcje reloadclasses_ w configu merba (wystarczy dać na false i będzie śmigać)
Jeszcze raz gorąco polecam przejrzeć README :)