Your SlideShare is downloading. ×
0
Efektivní vývoj webových aplikací
v Ruby On Rails
Karel Minařík
Karel Minařík

→ Absolvent FFUK, obor filosofie, diplomová práce o Adornově Estetické teorii

→ Web designer a vývojář na ...
http://data.karmi.cz/webexpo




                  Efektivní vývoj webových aplikací v RubyOnRails
1   Co je Ruby On Rails?




                           Efektivní vývoj webových aplikací v RubyOnRails
Webový framework




           Efektivní vývoj webových aplikací v RubyOnRails
Proč používat webový framework?




                    Efektivní vývoj webových aplikací v RubyOnRails
„Toto je sněhová vločka. Vaše aplikace není
jedna z nich. Většina věcí, které většina
lidí dělá, není nijak unikátní. Vaše...
SELECT * FROM people WHERE id = 1;
SELECT * FROM people WHERE id = 1;
SELECT * FROM people WHERE id = 1;
SELECT * FROM peo...
Efektivní vývoj webových aplikací v RubyOnRails
2004            2005                 2006

Ruby On Rails   Zend Framework       Merb („lepší než Rails“)
Django          C...
Open source, licence MIT
                 Efektivní vývoj webových aplikací v RubyOnRails
www.rubyonrails.org

                      Efektivní vývoj webových aplikací v RubyOnRails
Efektivní vývoj webových aplikací v RubyOnRails
Některé oblíbené nesmysly o Ruby a Rails

Ruby je „pomalé“

Nemužeme/nechceme se „učit nový programovací jazyk“
   ˚

Rail...
Ruby On Rails je jedním z nejucelenějších popisů
doporučených postupů pro moderní webový vývoj
a inspirací pro ostatní tec...
There’s no silver bullet!
Basecamp




           Efektivní vývoj webových aplikací v RubyOnRails
Basecamp




           Efektivní vývoj webových aplikací v RubyOnRails
Scaling Twitter
Silicon Valley Ruby Conference 2007, http://www.slideshare.net/Blaine/scaling-twitter




Surviving the Bi...
Efektivní vývoj webových aplikací v RubyOnRails
— Jukihiro Macumoto (Matz)
Přednáška Ruby Design Principles, 2006 (včetně MP3 záznamu)
http://itc.conversationsnetwork.org/shows/detail1638.html

   ...
Ruby from Other Languages
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/

                          ...
Klíčové součásti Ruby On Rails




                   Efektivní vývoj webových aplikací v RubyOnRails
Přehled
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Přehled



                                 Rails pluginy a Ruby gemy

             Generá...
Model—View—Controller




             Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Model–View–Controller




                                 Efektivní vývoj webových aplika...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Model–View–Controller a „konvence má přednost před konfigurací“



                       ...
Generátory kódu




           Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Generátory kódu




                           The Pragmatic Programmer: From Journeyman t...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Generátory kódu

 $ script/generate scaffold Person last_name:string date_of_birth:date

 ...
ActiveRecord




         Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Objektově relační mapování — ActiveRecord




             Martin Fowler, Patterns of Ente...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Objektově relační mapování — ActiveRecord


tabulka people
   ID            Name          ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Objektově relační mapování — ActiveRecord




Person.all :order => 'last_name DESC'

Perso...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Objektově relační mapování — ActiveRecord




p = Person.find 1
p.first_name = 'Robert'
p....
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Validace



 class Account < ActiveRecord::Base

    validates_presence_of ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Callbacks



   class Article < ActiveRecord::Base

      after_save    :cl...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace

                                 $ railroad -a -i -o full_models....
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace




                       class Project < ActiveRecord::Base

   ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace


                       class Project < ActiveRecord::Base
      ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — dočasné řešení




Objektové databáze
                                 Efek...
ActionController




            Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Routing — ActionController




Rails 1.1
                                 Efektivní vývoj ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Routing — ActionController




            I CAN HAS BETTA ROUTING!



Rails 1.1
         ...
RESTful




— DHH, RailsConf 2007 Keynote, „The World Of Resources“
— DHH, RailsConf 2007 Keynote, „The World Of Resources“
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Routing + Resources — ActionController

                   ActionController::Routing::Rout...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

REST Representional State Transfer




          REpresentational State Transfer
         ...
— DHH, RailsConf 2007 Keynote, „The World Of Resources“
ActiveResource




           Efektivní vývoj webových aplikací v RubyOnRails
— DHH, RailsConf 2007 Keynote, „The World Of Resources“
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveResource — ORM pro webové služby


class Person < ActiveResource::Base
  self.site =...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveResource — ORM pro webové služby


class Person < ActiveResource::Base
  self.site =...
ActionView




        Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActionView



                  people_controller.rb


               @person = Person.fin...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActionView



         Helpery pro formuláře, odkazy
         <% form_for @person do |f| %...
Automatizované testování




               Efektivní vývoj webových aplikací v RubyOnRails
Proč psát testy?
Proč nepsat testy víme — není čas, nejsou peníze, …




                                Efektivní vývoj w...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace



Testy jsou nejmocnějším pomocníkem agilního vývoje

T...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Podpora pro automatizované testování aplikace v Rails




Podpora pro
testovací data (fixt...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Testovací data


    test/fixtures/people.yml


# Read ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Unit Testing



           Test::Unit (standardní kniho...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Logika aplikace


    test/unit/person_test.rb


class ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Prezentační vrstva


    test/functional/projects_contr...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Příklady

class ProjectsControllerTest < ActionControll...
Co jsme vynechali?




             Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Co jsme vynechali?


Databázové migrace
Nástroj Rake
Konzole aplikace (script/console)
Ben...
Deployment Rails aplikací




                 Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Deployment



„Deployment“ — Instalace a aktualizace kódu aplikace na serveru

           ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Deployment




Bez efektivního procesu deploymentu nelze vyvíjet agilně




              ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Nástroj Capistrano pro efektivní deployment




     $ cap -T
     $ cap deploy:migrations...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Struktura Rails aplikace běžící v produkčním prostředí


                    (            ...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Budoucnost? Phusion Passenger (mod_rails)




$ gem install passenger
$ passenger-install-...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Rails hosting s mod_rails zdarma na zkoušku




                                      Efek...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS




                                 http://free.railshosting.cz

                         ...
Další zdroje a informace




                Efektivní vývoj webových aplikací v RubyOnRails
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Editory a IDE pro Ruby a Rails



           TextMate Mac OS X

           Vim + rails.vim...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace




                     Dave Thomas, David Heinemeier Hansson, et al.
...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace


                 Mike Naberezny and Derek DeVries, Rails for PHP Deve...
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace



                                 http://weblog.rubyonrails.org
     ...
2   Živá ukázka tvorby aplikace v Rails




                              Efektivní vývoj webových aplikací v RubyOnRails
www.tadalist.com od 37Signals

                       Efektivní vývoj webových aplikací v RubyOnRails
$ sudo gem install rails
$ rails -v
$ rails planner
 create   app/controllers
 create   app/helpers
 create   app/models
 ...
Děkuji!
  



 www.karmi.cz
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Upcoming SlideShare
Loading in...5
×

Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

5,492

Published on

Prezentace z přednášky na konferenci Webexpo

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,492
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
39
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)"

  1. 1. Efektivní vývoj webových aplikací v Ruby On Rails Karel Minařík
  2. 2. Karel Minařík → Absolvent FFUK, obor filosofie, diplomová práce o Adornově Estetické teorii → Web designer a vývojář na volné noze od roku 2000 → V minulosti Flash vývojář, art director, informační architekt v internetových agenturách → Doktorand Studií nových médií na FFUK → (Opuštěný) blog o Ruby on Rails na http://blog.karmi.cz → KONTAKT: karmi@karmi.cz Efektivní vývoj webových aplikací v RubyOnRails
  3. 3. http://data.karmi.cz/webexpo Efektivní vývoj webových aplikací v RubyOnRails
  4. 4. 1 Co je Ruby On Rails? Efektivní vývoj webových aplikací v RubyOnRails
  5. 5. Webový framework Efektivní vývoj webových aplikací v RubyOnRails
  6. 6. Proč používat webový framework? Efektivní vývoj webových aplikací v RubyOnRails
  7. 7. „Toto je sněhová vločka. Vaše aplikace není jedna z nich. Většina věcí, které většina lidí dělá, není nijak unikátní. Vaše potřeby nejsou nijak ‚zvláštní‘.“ David Heinemeier Hansson, přednáška na konferenci Future Of Web Applications, únor 2006
  8. 8. SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE id = 1; Efektivní vývoj webových aplikací v RubyOnRails
  9. 9. Efektivní vývoj webových aplikací v RubyOnRails
  10. 10. 2004 2005 2006 Ruby On Rails Zend Framework Merb („lepší než Rails“) Django CakePHP Efektivní vývoj webových aplikací v RubyOnRails
  11. 11. Open source, licence MIT Efektivní vývoj webových aplikací v RubyOnRails
  12. 12. www.rubyonrails.org Efektivní vývoj webových aplikací v RubyOnRails
  13. 13. Efektivní vývoj webových aplikací v RubyOnRails
  14. 14. Některé oblíbené nesmysly o Ruby a Rails Ruby je „pomalé“ Nemužeme/nechceme se „učit nový programovací jazyk“ ˚ Rails má „špatnou podporu na web hostingu“ Efektivní vývoj webových aplikací v RubyOnRails
  15. 15. Ruby On Rails je jedním z nejucelenějších popisů doporučených postupů pro moderní webový vývoj a inspirací pro ostatní technologie a frameworky Efektivní vývoj webových aplikací v RubyOnRails
  16. 16. There’s no silver bullet!
  17. 17. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  18. 18. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  19. 19. Scaling Twitter Silicon Valley Ruby Conference 2007, http://www.slideshare.net/Blaine/scaling-twitter Surviving the Big Rewrite: Moving YELLOWPAGES.COM to Rails RailsConf 2008, http://en.oreilly.com/rails2008/public/schedule/detail/2082 Efektivní vývoj webových aplikací v RubyOnRails
  20. 20. Efektivní vývoj webových aplikací v RubyOnRails
  21. 21. — Jukihiro Macumoto (Matz)
  22. 22. Přednáška Ruby Design Principles, 2006 (včetně MP3 záznamu) http://itc.conversationsnetwork.org/shows/detail1638.html Efektivní vývoj webových aplikací v RubyOnRails
  23. 23. Ruby from Other Languages http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ Efektivní vývoj webových aplikací v RubyOnRails
  24. 24. Klíčové součásti Ruby On Rails Efektivní vývoj webových aplikací v RubyOnRails
  25. 25. Přehled
  26. 26. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Přehled Rails pluginy a Ruby gemy Generátory kódu, Rake tasky, Capistrano, konzole aplikace, … Jádro frameworku: 1) Objektově relační mapování ActiveRecord 2) Směrování HTTP požadavků na řídící prvky aplikace ActionController a –View 3) Webové služby typu REST ActiveResource 4) Odesílání e-mailů ActionMailer 5) Rozšíření Ruby ActiveSupport Model—View—Controller „Konvence má přednost před konfigurací“ Efektivní vývoj webových aplikací v RubyOnRails
  27. 27. Model—View—Controller Efektivní vývoj webových aplikací v RubyOnRails
  28. 28. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Model–View–Controller Efektivní vývoj webových aplikací v RubyOnRails
  29. 29. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Model–View–Controller a „konvence má přednost před konfigurací“ Adresářová struktura Rails aplikace controllers/articles_controller.rb models/article.rb views/articles/index, edit, new, atd views/layouts/articles.html.erb Efektivní vývoj webových aplikací v RubyOnRails
  30. 30. Generátory kódu Efektivní vývoj webových aplikací v RubyOnRails
  31. 31. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Generátory kódu The Pragmatic Programmer: From Journeyman to Master, Andrew Hunt and David Thomas Passive Code Generators Passive code generators save typing. They are basically parameterized templates, generating a given output from a set of inputs. Once the result is produced, it becomes a  full-fledged source file in the project; it will be edited, compiled, and placed under source control just like any other file. Its origins will be forgotten. (str. 87) Efektivní vývoj webových aplikací v RubyOnRails
  32. 32. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Generátory kódu $ script/generate scaffold Person last_name:string date_of_birth:date create app/models/person.rb create test/unit/person_test.rb create test/fixtures/people.yml create db/migrate/20081007091729_create_people.rb create app/views/people/index.html.erb create app/views/people/show.html.erb create app/views/people/new.html.erb create app/views/people/edit.html.erb create app/views/layouts/people.html.erb create app/controllers/people_controller.rb create test/functional/people_controller_test.rb create app/helpers/people_helper.rb route map.resources :people Efektivní vývoj webových aplikací v RubyOnRails
  33. 33. ActiveRecord Efektivní vývoj webových aplikací v RubyOnRails
  34. 34. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Objektově relační mapování — ActiveRecord Martin Fowler, Patterns of Enterprise Application Architecture (2002) Efektivní vývoj webových aplikací v RubyOnRails
  35. 35. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Objektově relační mapování — ActiveRecord tabulka people ID Name Surname E-mail 1 John Smith smith@hotmail.com 2 Susanna Reddick susan@yahoo.com INSERT INTO people (name, surname, email) VALUES( 'John', 'Smith', 'smith@hotmail.com' ); SELECT * FROM people; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE surname = 'Smith'; # ActiveRecord::Base.establish_connection ... Person.create(:name => 'John', :surname => 'Smith', :email => 'smith@hotmail.com') Person.all Person.find(1) Person.find_by_surname('Smith') Efektivní vývoj webových aplikací v RubyOnRails
  36. 36. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Objektově relační mapování — ActiveRecord Person.all :order => 'last_name DESC' Person.all :conditions => quot;administrator = 1quot; Person.all(:conditions => [ quot;department = :department AND position = :positionquot;, {:department => params[:department], :position => params[:position]} ] ) Person.all :include => 'accounts' Person.all :group => 'country' Person.find_by_sql( quot;SELECT id AS complicated ...quot; ) Efektivní vývoj webových aplikací v RubyOnRails
  37. 37. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Objektově relační mapování — ActiveRecord p = Person.find 1 p.first_name = 'Robert' p.save p.destroy Efektivní vývoj webových aplikací v RubyOnRails
  38. 38. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Validace class Account < ActiveRecord::Base validates_presence_of :account_number, owner_id validates_numericality_of :balance validates_length_of :password, :minimum=> 4 validates_format_of :email, :with => /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})Z/i validates_acceptance_of :terms_of_service, :on => 'create' end http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001739&name=validates_presence_of Efektivní vývoj webových aplikací v RubyOnRails
  39. 39. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Callbacks class Article < ActiveRecord::Base after_save :clean_up_html after_destroy :audit_log protected def clean_up_html self.body.gsub( ... ) end def audit_log audit_logger.info(quot;Article #{self.title} has been removed by user #{current_user}quot;) end end http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001715&name=after_save Efektivní vývoj webových aplikací v RubyOnRails
  40. 40. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Asociace $ railroad -a -i -o full_models.dot -M http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001491&name=has_many Efektivní vývoj webových aplikací v RubyOnRails
  41. 41. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Asociace class Project < ActiveRecord::Base belongs_to :project_manager end create_table :projects do |t| t.string :title t.text :description t.integer :project_manager_id t.timestamps end Efektivní vývoj webových aplikací v RubyOnRails
  42. 42. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Asociace class Project < ActiveRecord::Base belongs_to :project_manager, :class_name => quot;Userquot; has_many :tasks end class User < ActiveRecord::Base has_many :projects has_many :tasks, :foreign_key => 'assigned_to' end class Task < ActiveRecord::Base belongs_to :project belongs_to :user, :foreign_key => quot;assigned_toquot; end Convention over configuration Efektivní vývoj webových aplikací v RubyOnRails
  43. 43. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — dočasné řešení Objektové databáze Efektivní vývoj webových aplikací v RubyOnRails
  44. 44. ActionController Efektivní vývoj webových aplikací v RubyOnRails
  45. 45. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing — ActionController Rails 1.1 Efektivní vývoj webových aplikací v RubyOnRails
  46. 46. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing — ActionController I CAN HAS BETTA ROUTING! Rails 1.1 Efektivní vývoj webových aplikací v RubyOnRails
  47. 47. RESTful — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  48. 48. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  49. 49. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing + Resources — ActionController ActionController::Routing::Routes.draw do |map| map.resources :people end people_path person_path(1) GET



http://www.example.com/people PeopleController#index() GET



http://www.example.com/people/1 PeopleController#show() POST


http://www.example.com/people PeopleController#create() PUT



http://www.example.com/people/1 PeopleController#update() DELETE
http://www.example.com/people/1 PeopleController#destroy() Rails 1.2.x RESTful! Efektivní vývoj webových aplikací v RubyOnRails
  50. 50. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS REST Representional State Transfer REpresentational State Transfer Mnohem více než „XML over HTTP“ Využití HTTP protokolu (GET, POST, PUT, DELETE) S resourcem (noun) je možné manipulovat (verb): CRUD: CREATE — UPDATE — DELETE Žádná informace o stavu resource není uchovávána na serveru Resource má různé reprezentace (HTML, XML, graf, ...) Každá reprezentace resource má unikátní URI (staff.html, staff.xml, staff.png) Efektivní vývoj webových aplikací v RubyOnRails
  51. 51. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  52. 52. ActiveResource Efektivní vývoj webových aplikací v RubyOnRails
  53. 53. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  54. 54. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveResource — ORM pro webové služby class Person < ActiveResource::Base self.site = quot;http://username:password@www.example.com:3000/quot; end # Expects a response of # # <person><id type=quot;integerquot;>1</id><attribute1>value1</attribute1><attribute2>..</attribute2></person> # # for GET http://api.people.com:3000/people/1.xml ryan = Person.find(1) ryan = Person.new(:first => 'Ryan', :last => 'Daigle') ryan.save # => true ryan.id # => 2 Efektivní vývoj webových aplikací v RubyOnRails
  55. 55. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveResource — ORM pro webové služby class Person < ActiveResource::Base self.site = quot;http://username:password@www.example.com:3000/quot; end Služba A Klient D „Mashup“ E Služba C Služba B Efektivní vývoj webových aplikací v RubyOnRails
  56. 56. ActionView Efektivní vývoj webových aplikací v RubyOnRails
  57. 57. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActionView people_controller.rb @person = Person.find params[:id] display.html.erb <h2>Jméno: <%= @person.name %></h2> <p>E-Mail: <%= mail_to @person.email %></p> <hr /> <%= link_to quot;Seznam lidíquot;, people_path %> Efektivní vývoj webových aplikací v RubyOnRails
  58. 58. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActionView Helpery pro formuláře, odkazy <% form_for @person do |f| %> <%= f.text_field :name %> <%=f.datetime_select :date_of_birth %? <% end %> <%= link_to @person.name, person_path(@person) %> <a href=quot;/person/show/1quot; ... /> Helpery pro Ajax, Scriptaculous, JavaScript <%= link_to_remote quot;Skrýtquot;, quot;updatequot; => 'list', :url => { :action => 'hide' } %> <a href ... onclick=quot;new Ajax.Updater ... /> Efektivní vývoj webových aplikací v RubyOnRails
  59. 59. Automatizované testování Efektivní vývoj webových aplikací v RubyOnRails
  60. 60. Proč psát testy? Proč nepsat testy víme — není čas, nejsou peníze, … Efektivní vývoj webových aplikací v RubyOnRails
  61. 61. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace Testy jsou nejmocnějším pomocníkem agilního vývoje Testy jsou obrana „proti sobě samému“ Testy jsou obrana proti příšerám (legacy code) Efektivní vývoj webových aplikací v RubyOnRails
  62. 62. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Podpora pro automatizované testování aplikace v Rails Podpora pro testovací data (fixtures) testování controllerů a views testování modelů Efektivní vývoj webových aplikací v RubyOnRails
  63. 63. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace: Testovací data test/fixtures/people.yml # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html john: first_name: John last_name: Smith country: Great Britain department: Accounting position: Accountant administrator: true robert: first_name: Roberto last_name: Callon country: Span department: Marketing position: Graphic Designer administrator: false Efektivní vývoj webových aplikací v RubyOnRails
  64. 64. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace: Unit Testing Test::Unit (standardní knihovna Ruby) require 'test/unit' class MyTest < Test::Unit::TestCase # def setup # end # def teardown # end def test_true_is_true assert_equal(true, true, 'Assertion was false.') end end Efektivní vývoj webových aplikací v RubyOnRails
  65. 65. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace: Logika aplikace test/unit/person_test.rb class PersonTest < ActiveSupport::TestCase # Replace this with your real tests. def test_truth assert true end end Efektivní vývoj webových aplikací v RubyOnRails
  66. 66. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace: Prezentační vrstva test/functional/projects_controller_test.rb class ProjectsControllerTest < ActionController::TestCase def test_should_get_index get :index assert_response :success assert_not_nil assigns(:projects) end end http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=C00000170&name=Assertions Efektivní vývoj webových aplikací v RubyOnRails
  67. 67. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Automatizované testování aplikace: Příklady class ProjectsControllerTest < ActionController::TestCase def test_should_get_index get :index # HTTP odpoved (tedy quot;200 OKquot;, nikoliv 302, 404, 403, 500, ...) assert_response :success # Naplnena promenna @projects assert_not_nil assigns(:projects) # Prave *dva* projekty assert_equal 2, assigns(:projects).size # Pouzita sablona assert_template quot;indexquot; # <title> stranky assert_select quot;titlequot;, quot;Projektyquot; # Fragment HTML kodu assert_tag :tag => 'li', :attributes => { :id => quot;project_#{projects(:babylon).id}quot;, :class => 'in_progress' } end end http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=C00000170&name=Assertions Efektivní vývoj webových aplikací v RubyOnRails
  68. 68. Co jsme vynechali? Efektivní vývoj webových aplikací v RubyOnRails
  69. 69. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Co jsme vynechali? Databázové migrace Nástroj Rake Konzole aplikace (script/console) Benchmarking a profilování kódu Pluginy a rozšíření Rails Rozšíření jazyka Ruby (1.day.ago, quot;catquot;.pluralize, ...) Cachování Internacionalizace (Lokalizace) Procesy běžící na pozadí … Efektivní vývoj webových aplikací v RubyOnRails
  70. 70. Deployment Rails aplikací Efektivní vývoj webových aplikací v RubyOnRails
  71. 71. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Deployment „Deployment“ — Instalace a aktualizace kódu aplikace na serveru Synchronizace přes FTP „Model PHP“ → „Upload and forget“ .BAK, .OLD, ... Nástroj Capistrano: Verzovaný kód aplikace (Subversion, Git) Aktualizace kódu aplikace Efektivita Návrat ke starší („funkční“) verzi Spouštění příkazů na serveru Monitoring stavu aplikace a serveru Efektivní vývoj webových aplikací v RubyOnRails
  72. 72. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Deployment Bez efektivního procesu deploymentu nelze vyvíjet agilně Efektivní vývoj webových aplikací v RubyOnRails
  73. 73. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Nástroj Capistrano pro efektivní deployment $ cap -T $ cap deploy:migrations $ cap invoke 'cd /home/deployer/app/curent; grep -in error log/production.log' www.capify.org Efektivní vývoj webových aplikací v RubyOnRails
  74. 74. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Struktura Rails aplikace běžící v produkčním prostředí ( ) Load Balancer Webserver reverse proxy Apache, Nginx, … Mongrel Zpracovává požadavky na Rails Statické soubory Čte web server rovnou z disku a obchází Mongrel i Rails Databáze Běží na stejném nebo jiném serveru Efektivní vývoj webových aplikací v RubyOnRails
  75. 75. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Budoucnost? Phusion Passenger (mod_rails) $ gem install passenger $ passenger-install-apache2-module Efektivní vývoj webových aplikací v RubyOnRails
  76. 76. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Rails hosting s mod_rails zdarma na zkoušku Efektivní vývoj webových aplikací v RubyOnRails
  77. 77. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS http://free.railshosting.cz Efektivní vývoj webových aplikací v RubyOnRails
  78. 78. Další zdroje a informace Efektivní vývoj webových aplikací v RubyOnRails
  79. 79. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Editory a IDE pro Ruby a Rails TextMate Mac OS X Vim + rails.vim plugin NetBeans Aptana RadRails CodeGear 3rd Rail Efektivní vývoj webových aplikací v RubyOnRails
  80. 80. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Zdroje a informace Dave Thomas, David Heinemeier Hansson, et al. Agile Web Development With Ruby On Rails, 2nd edition Pragmatic Bookshelf 2006 W říjen 2008 NE Peter Cooper, Beginning Ruby Apress 2007 Efektivní vývoj webových aplikací v RubyOnRails
  81. 81. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Zdroje a informace Mike Naberezny and Derek DeVries, Rails for PHP Developers Pragmatic Bookshelf, 2008 Why The Lucky Stiff, Poignant Guide to Ruby http://www.poignantguide.net/ruby/ David Flanagan and Yukihiro Matsumoto, The Ruby Programming Language Pragmatic Bookshelf 2007 Russ Olsen, Design Patterns in Ruby Pragmatic Bookshelf 2007 Efektivní vývoj webových aplikací v RubyOnRails
  82. 82. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Zdroje a informace http://weblog.rubyonrails.org www.rubyinside.com www.railsinside.com www.planetrubyonrails.com www.railscasts.com www.ruby-lang.org/en/documentation/quickstart http://forum.rubyonrails.cz #rubyonrails (IRC kanál na IRCNet) www.csrug.cz www.railsforphp.com http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-php Efektivní vývoj webových aplikací v RubyOnRails
  83. 83. 2 Živá ukázka tvorby aplikace v Rails Efektivní vývoj webových aplikací v RubyOnRails
  84. 84. www.tadalist.com od 37Signals Efektivní vývoj webových aplikací v RubyOnRails
  85. 85. $ sudo gem install rails $ rails -v $ rails planner create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create db create create create doc lib Ukázka lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/mocks/development create test/mocks/test create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache Efektivní vývoj webových aplikací v RubyOnRails
  86. 86. Děkuji!  www.karmi.cz
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×