Merb + db4o

Mini 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

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 reload_classes w configu merba (wystarczy dać na false i będzie śmigać)

Jeszcze raz gorąco polecam przejrzeć README :)


Looking for comments section?

Send me an email instead to teamon@me.com