Ruby on Rails 2.0: Evoluce, nikoliv revoluce

13. 12. 2007
Doba čtení: 6 minut

Sdílet

Webový framework Ruby on Rails již tu s námi je nějaký ten pátek. Za dobu své existence si získal velké množství příznivců jak z řad amatérských nadšenců, tak také z firemního prostředí. Nyní vyšla jeho dlouho očekávaná druhá major verze. Co přináší nového a co se změnilo? Jakým způsobem upgradovat?

Článek vychází z oznámení Davida Heinemeier Hanssona o Ruby on Rails 2.0 ze kterého byly též přejaty veškeré ukázky v článku.

Stručně o Rails

Webový framework Ruby on Rails napsal David Heinemeier Hansson z proslulé firmy 37Signals někdy již před více než čtyřmi lety. Na rozdíl od myriády jiných webových frameworků nevznikly Rails úvahou od stolu, praxí – Rails byly prostě vyextrahovány ze známého projektu Basecamp, na kterém David tou dobou pracoval.

A nějaké charakteristiky Rails? Rails se snaží o maximální jednoduchost a přehlednost. Striktně dodržují MVC architekturu, Convention over Configuration, tedy nepsaní věcí, které jdou odvodit, uznávají filosofii DRY, přinášejí abstrakční vrstvu nad databází takže není třeba psát přímo žádné SQL (ale pokud chcete, tak klidně můžete) a vůbec používají řadu osvědčených postupů.

Tyto charasteristiky by však jistě seděly na více webových frameworků. Čím se ale Rails zásadně liší je filosofie – Ruby se snaží, aby programování bylo zábavné a Rails tuto snahu dotahují téměř k dokonalosti. To v důsledku znamená jak spokojenější programátory, tak taky podstatně jednodušší možnost vyjádřit myšlenku, protože psaní v Rails je mnohem podobnější přirozenému jazyku než cokoliv jiného. Pokud vás zajímají podrobnosti, určitě si nezapomeňte přečíst skvělý úvod do Ruby on Rails od Karla Minaříka, který začíná právě zmíněnou filosofií.

Úspěch Rails dokládá například také jejich přidání do defaultní instalace Mac OS X 10.5 Leopard a to včetně několika dalších utilit jako je balíčkovací systém Rake a deployovací nástroj Capistrano. Ze známých projektů je pak v Rails napsán Basecamp, LinkedIn, BBC Programme Catalogue, Twitter, Shopify, Blurb.com, ChaCha.com, Justin.tv, CMS Mephisto a Typo nebo například také openSUSE Build Service.

Zapojte se do české Ruby a Ruby on Rails komunity!

Chcete se podílet nebo aspoň sledovat dění v české Ruby a Ruby on Rails komunitě? Připojte se do! Fórum, IRC, uživatelské skupiny… možností je spoustu. Pokud jste z Prahy či z blízkého okolí, můžete se též zúčastnit pravidelných Ruby a Ruby on Rails srazů, které se konají každou první středu v měsíci ve Fractal baru nedaleko Letenského náměstí. Kromě přátelského povídání bývají předmětem pozornosti zajímavé přednášky a diskuse k aktuálním akcím. Zájemcům o srazy doporučuji sledovat fórum, kde vždy bývá o setkání s dostatečným předstihem informováno. Jaké jsou tedy možnosti zapojení se do komunity?

Co nového přináší Rails 2.0?

Ruby on Rails jsou již dávno vyspělým webovým frameworkem a tedy jejich druhé vydání je mnohem spíše evoluční než revoluční. I přesto ale přináší spoustu zajímavých změn, o kterých je dobré vědět. Pojďme se s nimi tedy alespoň stručně seznámit.

Novinky v Action Pack

Změny ve views

Zásadní změnou ve views je oddělení formátu šablony od jeho renderovacího enginu. V praxi to znamená, že ze show.rhtml se nyní stane show.html.erb. Pokud budeme chtít například mít text ve formátu CSV a budeme do něj chtít skrze erbové značky vkládat Ruby kód, pojmenujeme akce.csv.erb. Několik příkladů za všechny:

  • akce.erb bude použito pro libovolný formát
  • akce.atom.builder nahradí nynější rxml a bude tedy použit pro mime typ  application/atom+xml
  • akce.iphone.haml využije šablonovací engin HAML pro formát  Mime::IPHONE

Ve spojení například s iPhone se hodí další vychytávka novou Rails, kterou je snadné deklarování „fake“ typů, což jsou vlastně aliasy na ty již existující. David jejich použití ukazuje na tomto příkladu:

# should go in config/initializers/mime_types.rb
Mime.register_alias "text/html", :iphone

class ApplicationController < ActionController::Base
 before_filter :adjust_format_for_iphone

 private
   def adjust_format_for_iphone
     if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(iPhone|iPod)/]
       request.format = :iphone
     end
   end
end

class PostsController < ApplicationController
 def index
   respond_to do |format|
     format.html   # renders index.html.erb
     format.iphone # renders index.iphone.erb
   end
 end
end

Jak je vidno z ukázky, své vlastní mime typy si můžete deklarovat v souboru config/initializers/mime_types.rb, který je nyní defaultně generován při vzniku každé nové aplikace.

Bezpečnost

Velmi podstatným přínosem nových Rails je zlepšení bezpečnosti a možnosti tvořit bezpečné aplikace out of the box. Rails nyní obsahují obranný mechanismus proti CRSF útokům a zlepšena byla například také možnost obrany proti XSS útokům.

Výkon

Nové Rails přinesly zásadní zrychlení Active Record, na němž se podílí například právě přidaná jednoduchá Query Cache, která umí identifikovat podobná SQL volání. Zásadním způsobem bylo též zapracováno na výkonu tzv. fixtures, takže výkon testů využívajících fixtures zvýšil o 50 až 100 procent.

Migrace

Příjemnou změnou přinesly také migrace. Změna je sice pouze syntaktická, no ale upřímně – koho by nepotěšilo ušetřit si psaní? Migrace „postaru“:

create_table :people do |t|
  t.column, "account_id",  :integer
  t.column, "first_name",  :string, :null => false
  t.column, "last_name",   :string, :null => false
  t.column, "description", :text
  t.column, "created_at",  :datetime
  t.column, "updated_at",  :datetime
end

… bude nyní moci být zapsána o mnoho jednodušeji:

create_table :people do |t|
  t.integer :account_id
  t.string  :first_name, :last_name, :null => false
  t.text    :description
  t.timestamps
end

Budiž jim země lehká …

V nových Rails funkcionalita nejen přibývala, ale také ubývala. Vyřazena byla například stránkovací funkcionalita, která je nyní dostupná přes plugin classic_pagina­tion, který si ovšem musíte doinstalovat nebo se porozhlídnout po jiné alternativě. Například plugin will_paginate ten klasický naprosto spolehlivě nahradí a dokonce i v mnohých věcech předčí.

Další změny

Ani tak není náš výčet ani zdaleka konečný. V Rails 2.0 byly opraveny stovky bugů, byla přidána podpora HTTP only cookies (ty ale zatím nepodporují všechny prohlížeče), byl zlepšen systém vyhazování výjimek, přidán byl nový modul pro základní HTTP autentizaci, do Rails se vrátil debugger a vůbec jsme se dočkali velké řady dalších změn. Pro podrobnější informace doporučuji nahlédnout do changelogu.

Jak upgradovat?

Před upgrade na Ruby on Rails 2.0 je doporučeno nejprve upgradovat na Rails 1.2.6, které obsahují upozornění na vlastnosti, které v Rails 2.0 již nebudou. Po odstranění zastaralých částí kódu stačí provést sudo gem install rails -y, případně ještě doinstalovat stránkovací plugin ( classic_pagi­nation nebo lépe will_paginate) a používáte-li Oracle, pak také gem activerecord-oracle-adapter. Nyní by váš web měl být schopen běžet na Rails 2.0.

bitcoin_skoleni

Závěr

Ruby on Rails již dávno odrostly dětským nemocem. Je to vyspělý, praktický a bezpečný webový framework, který nasazují firmy po celém světě a na lehkou váhu jej neberou ani firmy jako Borland nebo Sun Microsystems, když poskytují nástroje pro vývoj v Rails – 3rdRail a NetBeans edici pro Ruby a Ruby on Rails.

Ježíšek tedy začal tento rok nadělovat brzy. Krom Ruby on Rails 2.0 dostaneme v nejbližší době toužebně očekávaný Rubinius 1.0 a Ruby 1.9 s podporou unicode, několikanásobným zvýšením rychlosti a spoustou nových a skvělých vylepšení, takže jak to tak vypadá, rubyisté byli tento rok obzvláště hodní.

Odkazy

Autor článku

Jakub Šťastný byl v letech 2007 až 2008 redaktorem serveru Root.cz. Mezi jeho zájmy patří Linux, programování a typografický systém TeX.