Merb The Super Bike Of Frameworks
Upcoming SlideShare
Loading in...5

Merb The Super Bike Of Frameworks



Presentation to Toronto Ruby on Rails project nite, discussing differences between Merb and Rails, and how to get up and running on Merb

Presentation to Toronto Ruby on Rails project nite, discussing differences between Merb and Rails, and how to get up and running on Merb



Total Views
Views on SlideShare
Embed Views



12 Embeds 1,347 1292 33 8 3 2 2
http://work.rowanhick.local 2 1 1 1 1 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Merb The Super Bike Of Frameworks Merb The Super Bike Of Frameworks Presentation Transcript

  • The Pocket Rocket Framework Wednesday, June 11, 2008
  • Discussion tonight • Intended for people who don’t know what Merb is • Good grasp of Rails concepts • Not patient enough to google/irc/blog search etc to get started on Merb • Touch on a lot of features • All links/references up on tomorrow Wednesday, June 11, 2008
  • About me • Product Development Mgr for a startup in Toronto • Full time with Rails for 2.5 years • Previously PHP/MySQL for 4 years • 6 years Prior QA/BA/PM for Enterprise CAD/ CAM software dev company Wednesday, June 11, 2008
  • Objects of Desire • What are these doing in a presentation about Ruby web frameworks ? Wednesday, June 11, 2008
  • Bikes vs Cars • The Porsche, you just open the door, turn the key, and drive. It has a/c, a stereo, plush upholstery, everything. Accidents can and do happen but few and far between, but pretty user friendly. • The sports bike, it's raw, unadulterated. You can't hop on it wrapped in cotton wool, way easier to get burned. However it's faster, easier to replace, modify and tune things at a lower cost. Wednesday, June 11, 2008
  • Parallels to the world of MVC? Rails is... • Very user friendly & well documented • suitable for 80% most web projects • a turn-key frame work. Wednesday, June 11, 2008
  • ...and Merb is... • aiming for that other 20% • fast as all hell • going to require a little more skill to get up and running with • “the framework for hackers” Wednesday, June 11, 2008
  • Same same but different • It’s actually quite similar! (workflow, layout) • However ... don’t start emailing merb groups asking for feature XYZ to be implemented “like it is in Rails” • Don’t expect your app to port without code changes to Merb (although you’d be suprised how little needs to change) Wednesday, June 11, 2008
  • Who Built it • Ezra Zygmuntowicz • Yehuda Katz • + many others • You could get some glory too .. • want-to-contribute-to-merb-core-part-1 Wednesday, June 11, 2008
  • Key Philosophy • All you need and none you don’t • No code is faster than no code Wednesday, June 11, 2008
  • Anything that slows Merb down is a bug (my personal favourite) Wednesday, June 11, 2008
  • Merb-core -more gems • What the ? Isn’t it just Merb ? • merb-core is the basic slimmed down bare minimum code • merb-more contains niceities to help you along your way (action-args, assets, builder, cache, freezer, gen, haml, jquery, mailer, parts, slices) Wednesday, June 11, 2008
  • Switzerland • Merb is the Switzerland of Ruby frameworks • Doesn’t care that you might favour Datamapper over ActiveRecord • Lets you choose ORM, Test Framework, JS Framework, Rack Adaptor Wednesday, June 11, 2008
  • Getting started • To start off with get both core and more • gem install merb-core merb-more • choose your ORM ‣ gem install merb-activerecord ‣ gem install sequel ‣ gem sources -a && sudo gem install addressable english rspec data_objects do_mysql do_postgres do_sqlite3 dm-core dm-more Wednesday, June 11, 2008
  • merb-gen • Your new friend • generates code/files for your app rowan$ merb-gen app speeddemon RubiGen::Scripts::Generate create log create app ...etc • merb-gen app yourapp --flat (or) --very-flat puts your application on a serious diet. Wednesday, June 11, 2008
  • Differences RAILS MERB Routes config/routes.rb config/router.rb Initialization config/environment.rb config/init.rb Environment specific config/environments/* config/environments/* Plugins vendor/plugins gems Migrations db/migrate schema/migrations Testing test test (or) spec Public public public Models app/models app/models Controllers app/controllers app/controllers Helpers app/helpers app/helpers Lib lib/ (config in init.rb) Wednesday, June 11, 2008
  • vendor/plugins gems • Everything is a gem • Freeze your gems with your app • gem install -i somegem ~/yourapp/gems/ -- no-ri --no-rdoc • convert rails plugins, start with merb-gen plugin plugin_name • Lots underway q=merb Wednesday, June 11, 2008
  • edit config/init.rb • Choose your ORM use_orm: activerecord use_test: rspec • Include dependencies (eg mailer) dependencies quot;merb_helpersquot;, “merb-parts” Merb::BootLoader.after_app_loads do # Add dependencies here that must load after the application loads: dependencies quot;merb-mailerquot; # dependency quot;magic_adminquot; # this gem uses the app's model classes end Wednesday, June 11, 2008
  • I want my database.yml • Patience. Because you’ve told merb you want active record, just fire merb for the first time: rowan-laptop:speeddemon rowan$ merb ~ Loaded DEVELOPMENT Environment... ~ loading gem 'merb_activerecord' ... ~ loading gem 'activerecord' ... ~ No database.yml file found in /Users/rowan/testing/speeddemon/ config. ~ A sample file was created called database.sample.yml for you to copy and edit. • Copy, edit and save. Wednesday, June 11, 2008
  • merb-gen generators • Let’s you know what you can create automagically: rowan-laptop:b2b_merb rowan$ merb-gen generators ..... Installed Generators Rubygems: authenticated, controller, database_sessions_migration, migration, model, part_controller, resource, resource_controller • see more Wednesday, June 11, 2008
  • merb-gen model mymodel • Synonymous with script/generate mymodel • Extra points: ✓ dependent on ORM - creates migration or not ✓ dependent on test framework - creates spec or unit test Wednesday, June 11, 2008
  • Setup your first REST resource • merb-gen again $ merb-gen resource Product title:string • Sets up controller, views, model, test code • Get coding! Wednesday, June 11, 2008
  • Controller code • Looks reasonably similar: class Products < Application before :check_access_level provides :xml def index @products = Product.find(:all, :order => :sort_order ) display @products end def show @product = Product.find_by_product_id(params[:id]) raise NotFound unless @product display @product end ... Wednesday, June 11, 2008
  • Key Differences RAILS MERB products_controller products redirect_to( hash ) redirect ( string ) respond_to provides / only_provides / display before/after_filter before/after except exclude render(hash) render or render(‘hello world’) *optional *mandatory to get a view logger merb.logger url_for url Wednesday, June 11, 2008
  • display • Display handles mime type response provides :xml def index @product = Product.find(params[:id]) display @product end • Goto • Display then looks for index.xml.erb, if not found then calls @product.to_xml Wednesday, June 11, 2008
  • Syntactic sugar • Making controller methods look more like methods def my_action(id) product = Product.find(id) end • Automagically assigns id from params[:id] • In merb-more (merb-action-args) Wednesday, June 11, 2008
  • Part Controllers • Reusable 'components' for use in your views • Not accessible from outside world, but can see params hash • Their own generator • Again in merb-more (merb-parts) Wednesday, June 11, 2008
  • Implementing Parts • In config/init.rb dependency 'merb-parts' • Use merb-gen to set it up for you $ merb-gen part_controller widget ... create app/helpers/widget_part_helper.rb create app/parts/widget_part.rb create app/parts/views/widget_part/index.html.erb • Edit action(s) then call it from a view <%= WidgetPart => :index %> Wednesday, June 11, 2008
  • Exceptions • Handled in app/controllers/exceptions.rb def show @product = Product.find_by_product_id(params[:id]) raise NotFound unless @product display @product end • exceptions.not_found method • render out in that view what you want to show for that error Wednesday, June 11, 2008
  • Router is Powerful • Example from Yehudas slides at RailsConf Wednesday, June 11, 2008
  • Pressing the GO button • Simple merb -p 3000 -e development • Fires up a mongrel instance through merb • Hit it just like regular old rails app Wednesday, June 11, 2008
  • Hooking up to webserver • Merb implements a Rack adaptor • Allows you to use different types of application server depending on your needs • Example merb -p 3000 -e production -a thin • Mongrel, Thin, Ebb, Eventd Mongrel, Passenger • Connect Apache/Nginx -> Merb (not) Apache -> Mongrel -> Merb Wednesday, June 11, 2008
  • Resources Great videos slideshow?q=merb slideshow?q=datamapper Wednesday, June 11, 2008
  • The million dollar question Should I use it ? Wednesday, June 11, 2008
  • How long is a piece of string ! Wednesday, June 11, 2008
  • The End Wednesday, June 11, 2008
  • Credits • GT3 Pic - 433629365/ • Sport bike pic markhodgins/2447051098 • Yehudas RailsConf’08 slides for router code • Merb_vs_Ruby_on_Rails for folder comparison • Ezra and Yehuda for being the driving forces behind the awesomeness that is Merb + Datamapper Wednesday, June 11, 2008