Merb
Merb je webový MVC framework silně inspirovaný Ruby on Rails a v poslední době čím dál tím více také frameworkem Django. Jeho vývoj započal zakladatel Engine Yardu Ezra Zygmuntowicz. Původně vznikl jako jednoduchý patch do Rails, který měl umožnit rychlé uploadování souborů, které je v Rails tragicky pomalé. Merb byl tehdy pouhý mongrelový handler, postupně se z něj vyvinul plnohodnotný webový framework.
Vývojář | Engine Yard, vývoj vede Yehuda Katz |
---|---|
Aktuální verze | 1.1.3 (12. července 2010) |
Operační systém | Nezávislý na platformě |
Vyvíjeno v | Ruby |
Typ softwaru | Framework na vývoj webových aplikací |
Licence | MIT |
Web | merbivore.com |
Některá data mohou pocházet z datové položky. |
Za Merbem stojí Engine Yard, poměrně velká firma, která má v Ruby komunitě skvělé jméno. Dalšími z jejich projektů jsou například implementace Ruby Rubinius nebo DataMapper ORM.
Filosofie
Ačkoliv je Merb na první pohled velmi podobný Rails, oba frameworky mají dost odlišnou filosofii. Kdežto Rails jsou navrženy tak, aby podporovaly software vyhovující jejich tvůrcům, Merb se snaží být co nejvíce konfigurovatelný. Pokud v Merbu chcete změnit testovací framework, stačí změnit jedinou řádku v konfiguraci. Pokud to samé chcete v Rails, máte problém. O nepodpoře jiných šablonovacích systémů railsovými generátory nemluvě. Merb je tedy agnostický k šablonovacímu jazyku, testovacímu frameworku, javascriptovému frameworku i ORM. Volba nástrojů je u Merbu na uživatelích frameworku, nikoliv na jeho tvůrcích.
Merb se také snaží dodržovat styl jazyka Ruby a nevymýšlet si zbytečně vlastní metajazyk. Merb nedělá z Ruby něco jiného než je, jako se o to snaží Rails. To kritizovalo velké množství vývojářů, mezi nimi i designer a autor jazyka Ruby Jukihiro Macumoto zvaný „Matz“. Ten si Merb oblíbil a používá jej pro vývoj ve své firmě.
Proč používat Merb
- Vývojáři dbají i na rychlost a hardwarovou nenáročnost Merbu. Pomalost je brána jako bug.
- Je jednoduše konfigurovatelný.
- Výjimky routuje na kontrolér Exception.
- Slices umožňují psát pluginy obsahující hotové části aplikace.
- Part kontroléry řeší logiku jednotlivých podčástí stránky přímo nesouvisejících s hlavním obsahem.
- Obsahuje podporu testování
- Je kompatibilní s Passengerem, vaše aplikace bez problémů poběží na serveru Apache.
Architektura
DataMapper
DataMapper je zdaleka nejpoužívanější merbové ORM. Mezi jeho největší výhody patří automigrace. Stačí v modelu nadefinovat jaké bude mít vlastnosti a pustit automigrační task (rake db:automigrate) a příslušně databázové schéma bude vytvořeno. Pokud změníte libovolnou vlastnost v modelu, stačí pustit rake db:autoupgrade a struktura databáze bude změněna bez ztráty dat.
Za DataMapperem, stejně jako za Merbem stojí Engine Yard a hodně vývojářů Merbu se podílí i na DataMapperu a naopak. Mají proto podobnou filosofii. Zatímco Merb je agnostický k ORM, JavaScriptovému frameworku a šablonovacímu jazyku, DataMapper je agnostický k úložišti. Tím může být nejenom relační databáze, ale třeba YAML, CSV nebo CouchDB.
Stejně jako u Merbu, i u DataMapperu je kladen důraz na rychlost a čistou Ruby syntaxi, kterou se vyjadřují i věci, na které je v ActiveRecordu použít SQL podmínku.
Sequel
Sequel je minimalistické ORM zaměřené především na snadné a mocné dotazování.
ActiveRecord
ActiveRecord je ORM z Ruby on Rails. Je stabilní a odladěné, na druhou stranu ale pomalé a se syntaxí nutící psát SQL podmínky. Používalo se spíše dříve, když DataMapper nebyl ještě dostatečně odladěný.
Part kontroléry
Kromě běžných kontrolerů podporuje Merb přes plugin merb-parts také tzv. part controllers, tedy kontrolery určené pro práci tag cloud
Zachytávání výjimek
V Merbu je definován kontroler Exceptions, který je volán automaticky vždy, když je vyvolána výjimka NotFound, NotAcceptable nebo podobné. To umožňuje jednoduchou tvorbu vlastních chybových hlášení při zachování vzoru MVC.
Pluginy
Všechny merbové pluginy jsou klasické gemy, které je možno nainstalovat do složky gems v rootu aplikace. Výhoda této tzv. zabundlované aplikace je ta, že ať ji nasadíte kdekoliv, stačí ji pouze Ruby a RubyGems, vše ostatní načte ze své lokální složky gems.
V Merbu není problém napsat si také vlastní generátory. Ty mohou generovat jak celou merbovou aplikaci, tak její konkrétní části jako jsou modely nebo kontrolery.
Zásadní rozdíl je také v samotném kódu frameworku. Kód Merbu je velmi přehledný, dobře dokumentovaný a je v něm použito minimum „magie“ jako jsou například method_missing, define_method, eval a další, kterými se to v Rails jen hemží. Kód Merbu je tím mnohem přístupnější pro vývojáře pluginů i pro potenciální kontributory.
Slices
Zajímavou částí Merbu jsou tzv. slices, části aplikace, které lze přimountovat na určitou URL stejně jako to umí například framework Django. Příkladem slice je merb-auth, což je velmi dobře napsaný autentikační plugin, podporující mimo jiné i OpenID.
Deployment
Patrně nejjednodušší řešení pro deployment je využití Apache s Passengerem. Vzhledem k tomu, že každá merbová aplikace je zároveň aplikací rackovou, stačí jednoduše přidat config.ru do rootu aplikace a nakonfigurovat Passenger a aplikace by měla fungovat. Na nahrání na server je určen nástroj Capistrano.
Chystané novinky
Souběžně s aktuální řadou 1.0 se pracuje na nadcházející 1.1. Její patrně největší novinkou bude messenger, který by měl nahradit současný mailer. Messenger bude generické rozhraní pro notifikace, bude podporovat nejenom maily, ale také jabber, AMQP, Facebook, Twitter, IRC, SMS, XML-RPC a dokonce i macovský software Growl. V některé z dalších verzí by se do Merbu pravděpodobně měla dostat obdoba autoadminu z Djanga.
Komunita
Merb je mladý a zatím nepříliš známý framework, takže česká komunita se teprve formuje. V nejbližší době bude spuštěna česká obdoba oficiálních stránek a chystá se také český překlad online knihy o Merbu.
Dokumentace
Dokumentace je v současné době hlavním problémem Merbu. Merb team si je problému vědom a intenzivně pracuje na zlepšení. Momentálně je rozepsáno 6 knih o Merbu: dvě online a čtyři klasické. To svědčí o dosti živém zájmu o tuto platformu.