Tymon Tobolski

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 bash git clone git://github.com/teamon/rdb4o.git cd rdb4o rake install
  • merbrdb4o bash 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: ruby 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… bash ~ 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 bash 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: ```ruby 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 bash 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? bash 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 ```html <% @cats.each do |cat| %>

<%= cat.name %>, <%= cat.age %>, <%= cat.nice? %>

<% 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 :)


comments powered by Disqus

Read more