Merb 0.9.6

Opublikowane przez Jarosław Zabiełło Wed, 10 Sep 2008 22:22:00 GMT

Ci, co instalowali sobie Merba i robią sobie czasem aktualizację gemów Rubiego, mogą zauważyć że, co dwa tygodnie pojawia się kolejna jego wersja (w tej chwili jest to 0.9.6). Tak ma być aż do październikowej wersji 1.0. Co ciekawe, synchronicznie z Merbem pojawia się zbliżona wersja DataMappera. Nie jest to przypadek, bo deweloperzy obu projektów ściśle ze sobą współpracują (DataMapper 1.0 ma wyjść razem z Merbem 1.0).

Wydaje się, też że DataMapper zaczyna stawać się preferowanym ORM’em dla Merba, mimo że Merb nie jest od niego uzależniony (tak jak Rails od Active Record) i równie dobrze współpracuje z innymi ORM’ami napisanymi w Ruby, jak (b. dobry) Sequel czy wspomniany Active Record.

Merb aktualnie jest intensywnie szlifowany. Publiczne API jeszcze może ulec zmianie, więc ci co używają wersji bieżących muszą śledzić to, co się zmienia. Po wyjściu wersji 1.0 publiczne API ma być zamrożone aż do kolejnej wersji 2.0.

Bardzo ciekawie wygląda dodany niedawno do Merba radykalnie nowy, modularny i 100% wielowątkowy cache. Dodano też inteligentniejszą regenerację cache’a. Aplikacja nie jest zwalniana procesem regeneracji cache’a. Jeśli czas odświeżenia przeglądarki zbiegnie się z czasem odświeżenia danych, Merb uruchamia taki proces dopiero po wcześniejszym odesłaniu starszych danych do klienta. Ulepszono też sposób generowania projektu. Np. stworzenie nowego projektu, gdzie system testowania będzie oparty na RSpec, silnikiem szablonów będzie Haml, a ORM’em – DataMapper można odpalić za pomocą opcji generatora:

merb-gen app projekt --testing-framework=rspec \
                     --template-engine=haml \
                     --orm=datamapper

Jednak to, co stawia Merba wyrażnie wyżej od Rails to jego modularna budowa. Nie tylko można zamienić cały projekt w gema. Dzięki slices można całą aplikację dosłownie poskładać z gemów. Moim zdaniem, jest to nawet lepiej zrobione niż w Django.

Tagi , , ,  | 10 comments

Comments

  1. Avatar Seban powiedział about 9 hours later:

    Ciekawe czy nadejdzie taki czas, że to Merb będzie killer Ruby app tak jak teraz Rails. Ja nigdy nie próbowałem Merba, ale chyba czas się nim bardziej zainteresować.

  2. Avatar Jiima powiedział about 10 hours later:

    Niestety, coś za coś. Merb jest póki co bardziej złożony w konfiguracji niż Rails, co odstręcza od niego railsowców. Ja “stoję” po stronie Merb-a mniej więcej od kiedy o nim usłyszałem (choć wtedy udawało mi się go odpalić jedynie na colinuxie, o win32 i jruby mogłem co najwyżej pomarzyć). Ale w dyskusji z jednym zapalonym railsowcem nie udało mi się go przekonać – dla niego pluginy, prosta konfiguracja i “wszystko w jednym” railsów były cenniejsze niż modularność i większy freeform style merba. Rails 3 czy coś koło tego ma być podobno bezpieczny wątkowo i ma większe komercyjne wsparcie, więc też nie wiem czy Merb stanie się takim znowu “Killer App”. To co sprawiło że Rails wygrał to nie to, że był pierwszy (bo nie był), lecz raczej to że został odpowiednio rozreklamowany a teraz ma komercyjne wsparcie na całego.

  3. Avatar Uzytkownik powiedział about 10 hours later:

    Merb z tego co pamiętam był Railami ‘zrobionymi dobrze’. Rails na szczęście powoli wchłania nowinki – więc cel został w pewien sposób osiągnięty.

  4. Avatar szymon powiedział about 22 hours later:

    No fajnie, a przy próbie zrobienia modelu wywaliło mi że nie mam gemu merb_datamapper. No to instaluję… i wywala mi, że merb_datamapper requires dm-core (= 0.9.6, runtime). No to instaluję dm-core, ale takiego nie ma, bo jest tylko w wersji 0.9.5.

    I tak mi przychodzi do głowy czy warto brać się za używanie czegoś co jest wypuszczane jako nowa wersja bez zrobienia normalnych testów, amatorka. A tak chciałem sobie sprawdzić czy nadal są błędy jak np: używając postgresqla nie można jako parametr podać numeru portu na którym działa baza. Tzn. podać sobie można, ale po co skoro i tak merb łączy się na standardowym porcie 5432 zupełnie ignorując to co sobie wpisałem.

    I tak mnie ciekawi ile jeszcze takich kwiatków tam jest i to takich, które wynikają głównie z tego, że ktoś sobie nie przetestował softu przed releasem.

  5. Avatar Jarosław Zabiełło powiedział 1 day later:

    @Jiima: Na pewno atutem Rails są liczne książki, ale nie sądzę, aby Merb był jakoś trudniejszy w konfiguracji. Rails wcale nie jest projektem “wszystko w jednym”. Takim projektem jest bardziej Django. RoR nie ma i18n ani autoryzacji/autentykacji “out of box” (i18n wejdzie dopiero do RoR 2.2). Liczne pluginy RoR są atutem ale i wadą, bo są często słabej jakości oraz ich twórcy często nie nadążają z zachowaniem zgodności z najnowszą wersją RoR. Merb ma znacznie lepiej (i prościej) rozwiązane tworzenie pluginów, są one po prostu zwykłymi gemami.

    @Uzytkownik: Rails się rozwija i ulepsza, fakt. Ale wciąż niespecjalnie nadaje się do większych projektów z racji słabej modularności. Jeśli tego nie poprawią (a nie jest to prosta sprawa w RoR, bo już raz implementowali nieudolnie komponenty), to Merb (przy odpowiedniej promocji) powinien bez problemu zacząć wypierać Rails, PHP czy nawet Django z większych projektów (Django wciąż nie umie pracować z wieloma bazami).

    @szymon: Trochę histeryzujesz. Po pierwsze, DM i Merb nie są jeszcze wersjami finalnymi. Zaczekaj z tym do października. Po drugie, to są dwa różne projekty. Trochę bez sensu jest mówić, że plugin merb_datamapper nie jest przetestowany bo dm-core, (pochodzący z zupełnie innego projektu!), nie ma dostępnej wersji 0.9.6 na serwerze RubyForge. W rzeczy samej gem w tej wersji jest, ale jeszcze w repozytorium, więc trzeba go samemu zbudować i dodać:

    git clone git://github.com/sam/dm-core.git
    cd dm-core
    rake gem
    sudo gem install -l pkg/dm-core-0.9.6.gem

    Co do PostgreSQL to nie ma on nic wspólnego z Merbem. Merb z założeń jest database agnostic, nie musi w ogóle używać baz danych. A jeśli używa to robi to za pomocą zewnętrznych ORM’ów. Więc takie uwagi kieruj do deweloperów ORM’a jaki używasz. Jeśli użyłeś DataMappera, to jest on w wersji developerskiej, nie finalnej. Możesz zamiast tego użyć ActiveRecord lub Sequel – one są w wersjach stabilnych (Sequel ma już wersję 2.5).

  6. Avatar szymon powiedział 1 day later:

    hm… takich nieobsługiwanych zależności jest więcej. Sequel też mi nie działa, bo przy generowaniu modelu wywala się na nieistniejącej metodzie. Ogólnie to jakaś masakra, ciekawe co będzie w październiku, bo tak naprawdę to aż boję się iść produkcyjnie z takim kodem skoro robią tam zależności nawet nie typu >=0.9.6, ale zależności =0.9.6. Kod z repo też nie działa, bo niektóre gemy się zainstalowały w wersji 0.9.7, czyli i tak będę musiał ręcznie poinstalować wszystko w wersjach 0.9.6, bo ktoś zrobił takie śmieszne zależności. Jeśli po wydaniu wersji 1.0 dalej będą tak się bawić zależnościami to ja podziękuję za merba, bo deployment będzie mógł położyć każdą stronę.

  7. Avatar m4chu powiedział 1 day later:

    Polecam zarządzanie wersjami Merba i DMa za pomocą Sake, np:

    sake merb:update merb:install:all

  8. Avatar szymon powiedział 1 day later:

    Jasne, już próbowałem, wygląda to tak (zgodnie z informacjami na stronie merba):

    $ sake -i http://github.com/wycats/merb-more/tree/master%2Ftools%2Fmerb-dev.rake?raw=true $ sake merb:clone $ sake merb:install:all

    a potem dostaję:

    sake merb:clone rake aborted! can’t convert true into String

    (See full trace by running task with—trace)

    Przy innych poleceniach z sake też jest taki efekt. Określenia, które mi się cisną na klawiaturę zaczynają się od ‘g**’, na ‘amatorka’ kończąc. Jak można wypuszczać takie coś jako publiczny release do używania, jak to testują (wcale?). Efekt jest taki: potrzebuję framework do szybkiego stworzenia skomplikowanego szkieletu strony dla klienta, taka wstępna wersja, ale z możliwościami rozrośnięcia się w coś dużego. Chciałem merba, bo wyglądał fajnie i podobno jest szybszy od ROR, poprzednio merb mi działał, ale niestety zmieniłem komputer, instaluję merba od nowa… i nie działa, muszę sobie lecieć z ręcznymi updatami z repozytorium. Wyciągam merba z repo, jest wersja 0.9.7, z którą datamapper nie działa, sequel się wywala przy generowaniu modelu. Great. Sake też nie działa. Podsumowując moje żale: nie stać mnie na poważne włażenie we framework, którego twórcy mają w nosie użytkowników i wypuszczają publicznie niedziałające wersje. Potem sobie zrobię update i szlag mi trafi produkcyjną stronę. To ja już wole coś innego, może ROR, może Django, ale nie framework robiony przez dzieciaki, którym nie chce się porządnie pisać kodu. Merb może i jest OK, ale dla mnie sam merb jest bezużyteczny, potrzebuję używać bazę i do tego pluginy i nie interesuje mnie kto je pisze. Tak, wiem, ja narzekam, to jest wersja nieprodukcyjna, a wersja 1.0 dopiero będzie. Żadna to pociecha skoro będą to robić ludzie, których podejście do tego pisanie jest takie zabawne.

  9. Avatar Jarosław Zabiełło powiedział 1 day later:

    @szymon: Rozumiem twoją frustrację. Projekt jest w trakcie końcowych, dużych zmian, więc najlepiej po prostu poczekać do października jeśli nie chcesz się teraz męczyć.

    Wersję edge Merba i DM najlepiej instalować za pomocą Thor’a tak, jak to opisano w artykule.

    W pliku config/init.rb należy odkomentować use_orm :datamapper oraz zapuścić rake dm:db:database_yaml aby stworzyć przykładowy plik database.yml.

    Z tego co szybko sprawdziłem, Merb i DataMapper w wersjach edge działają poprawnie. Trzeba tylko zainstalować to z Thora, a nie Sake.

    Co do Sequela to jest literówka w pluginie merb_sequel. W generators/model.rb zmień końcowe |y| na |t|. Powinno pomóc. Zaraz im wrzucę patch.

  10. Avatar Jiima powiedział 4 days later:

    @JZ Zgadza się, ale… kto pushuje kod z literówkami, o buildach nie wspomnę? Ech, za taki występ, ja, plugawy pies korporacji miałbym już po premii… Tu jednak widać, że kompilacja ma zalety, niewiele ale jednak. Co więcej, większość języków, nawet tych “dynamicznych” ma narzędzia typu lint, które można by było częściej używać… To, że przed gemem napiszesz “0” nie zwalnia cię z przetestowania tego. Bugi rozumiem, zawsze się mogą zdarzyć, ale coś takiego…

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz