SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
Efektivní vývoj webových aplikací
v Ruby On Rails
Karel Minařík
karmi.cz




       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
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
Efektivní vývoj webových aplikací v RubyOnRails
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
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 Big Rewrite: Moving YELLOWPAGES.COM to Rails
RailsConf 2008, http://en.oreilly.com/rails2008/public/schedule/detail/2082
InfoQ, YELLOWPAGES.COM: Behind the Curtain, http://www.infoq.com/presentations/straw-yellowpages




                                                              Efektivní vývoj webových aplikací v RubyOnRails
http://www.infoq.com/presentations/straw-yellowpages




                                  Efektivní vývoj webových aplikací v RubyOnRails
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

                                           Efektivní vývoj webových aplikací v RubyOnRails
Ruby from Other Languages
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/

                                               Efektivní vývoj webových aplikací v RubyOnRails
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á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
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 aplikací v RubyOnRails
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
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 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
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
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 Enterprise Application Architecture (2002)

                                                      Efektivní vývoj webových aplikací v RubyOnRails
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
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

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




Person.all :order => 'last_name DESC'

Person.all :conditions => "administrator = 1"

Person.all(:conditions => [ "department = :department AND position = :position",
                                 {:department => params[:department],
                                  :position => params[:position]} ] )

Person.all :include => 'accounts'

Person.all :group => 'country'

Person.find_by_sql( "SELECT id AS complicated ..." )




                                                           Efektivní vývoj webových aplikací v RubyOnRails
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
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
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("Article           #{self.title} has been removed by user #{current_user}")
      end

   end



http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M001715&name=after_save

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

ActiveRecord — Asociace

                                 $ railroad -a -i -o full_models.dot -M




http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M001491&name=has_many

                                                                    Efektivní vývoj webových aplikací v RubyOnRails
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
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace


                       class Project < ActiveRecord::Base
                          belongs_to    :project_manager, :class_name => "User"
                          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 => "assigned_to"
                       end



                                     Convention over configuration


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

 ActiveRecord — dočasné řešení




Dokumentově orientované databáze , key:value store, atd.
                                      Efektivní vývoj webových aplikací v RubyOnRails
ActionController




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

Routing — ActionController




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

Routing — ActionController




Rails 1.1
                                 Efektivní vývoj webových aplikací v RubyOnRails
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
Inner API                                 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::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
— DHH, RailsConf 2007 Keynote, „The World Of Resources“
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

  ActiveResource — ORM pro webové služby




— 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 = "http://username:password@www.example.com:3000/"
end

# Expects a response of
#
# <person><id type="integer">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
ActionView




        Efektivní vývoj webových aplikací v RubyOnRails
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 "Seznam lidí", people_path %>




                                                 Efektivní vývoj webových aplikací v RubyOnRails
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="/person/show/1" ... />



        Helpery pro Ajax, Scriptaculous, JavaScript
        <%= link_to_remote "Skrýt", "update" => 'list', :url => { :action =>
        'hide' } %>
        <a href ... onclick="new Ajax.Updater ... />




                                                      Efektivní vývoj webových aplikací v RubyOnRails
Automatizované testování




               Efektivní vývoj webových aplikací v RubyOnRails
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
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
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
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: Spain
  department: Marketing
  position: Graphic Designer
  administrator: false




                                                      Efektivní vývoj webových aplikací v RubyOnRails
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
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 "200 OK", 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 "index"
        # <title> stranky
        assert_select "title", "Projekty"
        # Fragment HTML kodu
        assert_tag :tag => 'li',
                   :attributes => { :id => "project_#{projects(:babylon).id}",
                                    :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
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)
Alternativní testovací frameworky
Pluginy a rozšíření Rails
Rozšíření jazyka Ruby (1.day.ago, "cat".pluralize, ...)
Cachování
Internacionalizace (Lokalizace)
Šablony pro skelet aplikace        (Instalace pluginů, repositáře, vlastních nastavení, atd.)


…
                                                     Efektivní vývoj webových aplikací v RubyOnRails
Deployment Rails aplikací




                 Efektivní vývoj webových aplikací v RubyOnRails
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
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
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Phusion Passenger (mod_rails, mod_rack, ap.)




$ gem install passenger
$ passenger-install-apache2-module


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




                                 http://free.railshosting.cz

                                                       Efektivní vývoj webových aplikací v RubyOnRails
Další zdroje a informace




                Efektivní vývoj webových aplikací v RubyOnRails
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
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace


                 Mike Naberezny and Derek DeVries, Rails for PHP Developers
                 Pragmatic Bookshelf, 2008




                 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
KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace



                                 http://guides.rubyonrails.org
                                 www.railsinside.com
                                 www.railscasts.com
                                 www.ruby-lang.org/en/documentation/quickstart
                                 www.rubyinside.com


                                 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
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
 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
Děkuji!
  



 www.karmi.cz

Más contenido relacionado

Similar a Představení Ruby on Rails [Junior Internet]

Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciMartin Krištof
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railsKeyup
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiDevelcz
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
Semantický web a Drupal
Semantický web a Drupal Semantický web a Drupal
Semantický web a Drupal devmates
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Pavel Růžička
 
Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Michal Franc
 
WordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptWordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptBorek Bernard
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitDesingdev
 
Api & Push notifications
Api & Push notificationsApi & Push notifications
Api & Push notificationsPetr Kaleta
 
Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Pavel Ungr
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seoH1.cz
 
ASP.NET - Make Web not War
ASP.NET - Make Web not WarASP.NET - Make Web not War
ASP.NET - Make Web not WarAleš Roubíček
 

Similar a Představení Ruby on Rails [Junior Internet] (20)

Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
Semantický web a Drupal
Semantický web a Drupal Semantický web a Drupal
Semantický web a Drupal
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)
 
Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015Selenium Webdriver - jOpenSpace 2015
Selenium Webdriver - jOpenSpace 2015
 
TNPW2-2011-06
TNPW2-2011-06TNPW2-2011-06
TNPW2-2011-06
 
TNPW2-2011-08
TNPW2-2011-08TNPW2-2011-08
TNPW2-2011-08
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
WordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptWordPress REST API + React + TypeScript
WordPress REST API + React + TypeScript
 
TNPW2-2012-07
TNPW2-2012-07TNPW2-2012-07
TNPW2-2012-07
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
 
Api & Push notifications
Api & Push notificationsApi & Push notifications
Api & Push notifications
 
Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)Vytvořeno pro SEO (Designed for SEO)
Vytvořeno pro SEO (Designed for SEO)
 
Pavel ungr designed_for_seo
Pavel ungr designed_for_seoPavel ungr designed_for_seo
Pavel ungr designed_for_seo
 
ASP.NET - Make Web not War
ASP.NET - Make Web not WarASP.NET - Make Web not War
ASP.NET - Make Web not War
 

Más de Karel Minarik

Vizualizace dat a D3.js [EUROPEN 2014]
Vizualizace dat a D3.js [EUROPEN 2014]Vizualizace dat a D3.js [EUROPEN 2014]
Vizualizace dat a D3.js [EUROPEN 2014]Karel Minarik
 
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]Realtime Analytics With Elasticsearch [New Media Inspiration 2013]
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]Karel Minarik
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Karel Minarik
 
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)Shell's Kitchen: Infrastructure As Code (Webexpo 2012)
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)Karel Minarik
 
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)Karel Minarik
 
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Karel Minarik
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesKarel Minarik
 
CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the WebKarel Minarik
 
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Karel Minarik
 
Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Karel Minarik
 
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)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Karel Minarik
 
Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on RailsKarel Minarik
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7Karel Minarik
 
Úvod do programování 6
Úvod do programování 6Úvod do programování 6
Úvod do programování 6Karel Minarik
 
Úvod do programování 5
Úvod do programování 5Úvod do programování 5
Úvod do programování 5Karel Minarik
 
Úvod do programování 4
Úvod do programování 4Úvod do programování 4
Úvod do programování 4Karel Minarik
 
Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Karel Minarik
 
Historie programovacích jazyků
Historie programovacích jazykůHistorie programovacích jazyků
Historie programovacích jazykůKarel Minarik
 
Úvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeÚvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeKarel Minarik
 
Interaktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryInteraktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryKarel Minarik
 

Más de Karel Minarik (20)

Vizualizace dat a D3.js [EUROPEN 2014]
Vizualizace dat a D3.js [EUROPEN 2014]Vizualizace dat a D3.js [EUROPEN 2014]
Vizualizace dat a D3.js [EUROPEN 2014]
 
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]Realtime Analytics With Elasticsearch [New Media Inspiration 2013]
Realtime Analytics With Elasticsearch [New Media Inspiration 2013]
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]
 
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)Shell's Kitchen: Infrastructure As Code (Webexpo 2012)
Shell's Kitchen: Infrastructure As Code (Webexpo 2012)
 
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)
Elastic Search: Beyond Ordinary Fulltext Search (Webexpo 2011 Prague)
 
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational Databases
 
CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the Web
 
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
 
Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)
 
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)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
 
Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on Rails
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7
 
Úvod do programování 6
Úvod do programování 6Úvod do programování 6
Úvod do programování 6
 
Úvod do programování 5
Úvod do programování 5Úvod do programování 5
Úvod do programování 5
 
Úvod do programování 4
Úvod do programování 4Úvod do programování 4
Úvod do programování 4
 
Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)
 
Historie programovacích jazyků
Historie programovacích jazykůHistorie programovacích jazyků
Historie programovacích jazyků
 
Úvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeÚvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra stroje
 
Interaktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryInteraktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzory
 

Představení Ruby on Rails [Junior Internet]

  • 1. Efektivní vývoj webových aplikací v Ruby On Rails Karel Minařík
  • 2. karmi.cz Efektivní vývoj webových aplikací v RubyOnRails
  • 3. 1 Co je Ruby On Rails? Efektivní vývoj webových aplikací v RubyOnRails
  • 4. Webový framework Efektivní vývoj webových aplikací v RubyOnRails
  • 5. 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
  • 6. Efektivní vývoj webových aplikací v RubyOnRails
  • 7. Open source, licence MIT Efektivní vývoj webových aplikací v RubyOnRails
  • 8. www.rubyonrails.org Efektivní vývoj webových aplikací v RubyOnRails
  • 9. Efektivní vývoj webových aplikací v RubyOnRails
  • 10. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  • 11. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  • 12. 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 InfoQ, YELLOWPAGES.COM: Behind the Curtain, http://www.infoq.com/presentations/straw-yellowpages Efektivní vývoj webových aplikací v RubyOnRails
  • 13. http://www.infoq.com/presentations/straw-yellowpages Efektivní vývoj webových aplikací v RubyOnRails
  • 14. Efektivní vývoj webových aplikací v RubyOnRails
  • 16. 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
  • 17. Ruby from Other Languages http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ Efektivní vývoj webových aplikací v RubyOnRails
  • 18. Klíčové součásti Ruby On Rails Efektivní vývoj webových aplikací v RubyOnRails
  • 20. 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
  • 21.
  • 22. Model—View—Controller Efektivní vývoj webových aplikací v RubyOnRails
  • 23. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Model–View–Controller Efektivní vývoj webových aplikací v RubyOnRails
  • 24. 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
  • 25. Generátory kódu Efektivní vývoj webových aplikací v RubyOnRails
  • 26. 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
  • 27. 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
  • 28. ActiveRecord Efektivní vývoj webových aplikací v RubyOnRails
  • 29. 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
  • 30. 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
  • 31. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Objektově relační mapování — ActiveRecord Person.all :order => 'last_name DESC' Person.all :conditions => "administrator = 1" Person.all(:conditions => [ "department = :department AND position = :position", {:department => params[:department], :position => params[:position]} ] ) Person.all :include => 'accounts' Person.all :group => 'country' Person.find_by_sql( "SELECT id AS complicated ..." ) Efektivní vývoj webových aplikací v RubyOnRails
  • 32. 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
  • 33. 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
  • 34. 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("Article #{self.title} has been removed by user #{current_user}") end end http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M001715&name=after_save Efektivní vývoj webových aplikací v RubyOnRails
  • 35. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Asociace $ railroad -a -i -o full_models.dot -M http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M001491&name=has_many Efektivní vývoj webových aplikací v RubyOnRails
  • 36. 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
  • 37. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — Asociace class Project < ActiveRecord::Base belongs_to :project_manager, :class_name => "User" 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 => "assigned_to" end Convention over configuration Efektivní vývoj webových aplikací v RubyOnRails
  • 38. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — dočasné řešení Dokumentově orientované databáze , key:value store, atd. Efektivní vývoj webových aplikací v RubyOnRails
  • 39. ActionController Efektivní vývoj webových aplikací v RubyOnRails
  • 40. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing — ActionController Rails 1.1 Efektivní vývoj webových aplikací v RubyOnRails
  • 41. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing — ActionController Rails 1.1 Efektivní vývoj webových aplikací v RubyOnRails
  • 42. 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
  • 43. Inner API RESTful — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 44. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 45. 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
  • 46. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 47. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveResource — ORM pro webové služby — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 48. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveResource — ORM pro webové služby class Person < ActiveResource::Base self.site = "http://username:password@www.example.com:3000/" end # Expects a response of # # <person><id type="integer">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
  • 49. ActionView Efektivní vývoj webových aplikací v RubyOnRails
  • 50. 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 "Seznam lidí", people_path %> Efektivní vývoj webových aplikací v RubyOnRails
  • 51. 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="/person/show/1" ... /> Helpery pro Ajax, Scriptaculous, JavaScript <%= link_to_remote "Skrýt", "update" => 'list', :url => { :action => 'hide' } %> <a href ... onclick="new Ajax.Updater ... /> Efektivní vývoj webových aplikací v RubyOnRails
  • 52. Automatizované testování Efektivní vývoj webových aplikací v RubyOnRails
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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: Spain department: Marketing position: Graphic Designer administrator: false Efektivní vývoj webových aplikací v RubyOnRails
  • 57. 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
  • 58. 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 "200 OK", 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 "index" # <title> stranky assert_select "title", "Projekty" # Fragment HTML kodu assert_tag :tag => 'li', :attributes => { :id => "project_#{projects(:babylon).id}", :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
  • 59. Co jsme vynechali? Efektivní vývoj webových aplikací v RubyOnRails
  • 60. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Co jsme vynechali? Databázové migrace Nástroj Rake Konzole aplikace (script/console) Alternativní testovací frameworky Pluginy a rozšíření Rails Rozšíření jazyka Ruby (1.day.ago, "cat".pluralize, ...) Cachování Internacionalizace (Lokalizace) Šablony pro skelet aplikace (Instalace pluginů, repositáře, vlastních nastavení, atd.) … Efektivní vývoj webových aplikací v RubyOnRails
  • 61. Deployment Rails aplikací Efektivní vývoj webových aplikací v RubyOnRails
  • 62. 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
  • 63. 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
  • 64. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Phusion Passenger (mod_rails, mod_rack, ap.) $ gem install passenger $ passenger-install-apache2-module Efektivní vývoj webových aplikací v RubyOnRails
  • 65. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS http://free.railshosting.cz Efektivní vývoj webových aplikací v RubyOnRails
  • 66. Další zdroje a informace Efektivní vývoj webových aplikací v RubyOnRails
  • 67. 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
  • 68. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Zdroje a informace Mike Naberezny and Derek DeVries, Rails for PHP Developers Pragmatic Bookshelf, 2008 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
  • 69. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Zdroje a informace http://guides.rubyonrails.org www.railsinside.com www.railscasts.com www.ruby-lang.org/en/documentation/quickstart www.rubyinside.com 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
  • 70. 2 Živá ukázka tvorby aplikace v Rails Efektivní vývoj webových aplikací v RubyOnRails
  • 71. www.tadalist.com od 37Signals Efektivní vývoj webových aplikací v RubyOnRails
  • 72. $ 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
  • 73. Děkuji!  www.karmi.cz