Č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?
- IRC: #rubyonrails na IRCNetu
- Česká Planet Ruby on Rails
- Ruby on Rails fórum [1, 2]
- Working With Rails: Prague User Group, Czech and Slovak User Group
- Konference Ostrava on Rails
- … a spoustu našich členů má svůj profil také na Facebooku
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 typapplication/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_pagination
, 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_pagination
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.
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í.