SlideShare a Scribd company logo
1 of 89
Download to read offline
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 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
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 potřeby
nejsou nijak ‚zvláštní‘.“
David Heinemeier Hansson,
přednáška na konferenci Future Of Web Applications, únor 2006
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
Efektivní vývoj webových aplikací v RubyOnRails
2004            2005                 2006

Ruby On Rails   Zend Framework       Merb („lepší než Rails“)
Django          CakePHP




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

ActiveRecord — dočasné řešení




Objektové databáze
                                 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




            I CAN HAS BETTA ROUTING!



Rails 1.1
                                 Efektivní vývoj webových aplikací v RubyOnRails
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
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
— 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 = 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
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
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 quot;Seznam lidíquot;, 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=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
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 webových aplikací v RubyOnRails
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
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: 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
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: 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 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
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)
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
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

                                                          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
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
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

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

Budoucnost? Phusion Passenger (mod_rails)




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


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

Rails hosting s mod_rails zdarma na zkoušku




                                      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

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
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




                 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
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
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

More Related Content

Viewers also liked

FokusLeasingFleet_Juni2016
FokusLeasingFleet_Juni2016FokusLeasingFleet_Juni2016
FokusLeasingFleet_Juni2016Yannick Depr
 
Reflections, New Methodologies, and Thought Processes
Reflections, New Methodologies, and Thought ProcessesReflections, New Methodologies, and Thought Processes
Reflections, New Methodologies, and Thought ProcessesBabu George
 
Balneario de Zújar
Balneario de Zújar Balneario de Zújar
Balneario de Zújar morafines
 
Que es cloud computing ?
Que es cloud computing ?Que es cloud computing ?
Que es cloud computing ?Darvin Otero
 
Non Violence And Peace Day 1
Non Violence And Peace Day 1Non Violence And Peace Day 1
Non Violence And Peace Day 1pepeperoxil
 
Amexco kundenanlass 111122 version3
Amexco kundenanlass 111122 version3Amexco kundenanlass 111122 version3
Amexco kundenanlass 111122 version3Travelbrain GmbH
 
Hoja de vida
Hoja de vidaHoja de vida
Hoja de vidaecpb23
 
Programa ADIVAC 2012
Programa ADIVAC 2012Programa ADIVAC 2012
Programa ADIVAC 2012jehu
 
Mayfran steel belt conveyors for metalworking
Mayfran steel belt conveyors for metalworkingMayfran steel belt conveyors for metalworking
Mayfran steel belt conveyors for metalworkingGotma Engineering Ab
 
Manual de wordpress para novatos
Manual de wordpress para novatosManual de wordpress para novatos
Manual de wordpress para novatosBrox Technology
 
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...Introduccion a la investigación sobre la movilidad urbana una propuesta desde...
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...Juan Ignacio Rodriguez
 
BULLISMO: LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. Vanin
BULLISMO:  LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. VaninBULLISMO:  LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. Vanin
BULLISMO: LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. VaninPaolo Madeyski
 

Viewers also liked (19)

FokusLeasingFleet_Juni2016
FokusLeasingFleet_Juni2016FokusLeasingFleet_Juni2016
FokusLeasingFleet_Juni2016
 
Reflections, New Methodologies, and Thought Processes
Reflections, New Methodologies, and Thought ProcessesReflections, New Methodologies, and Thought Processes
Reflections, New Methodologies, and Thought Processes
 
Como Vender con YouTube Marketing
Como Vender con YouTube MarketingComo Vender con YouTube Marketing
Como Vender con YouTube Marketing
 
Balneario de Zújar
Balneario de Zújar Balneario de Zújar
Balneario de Zújar
 
Que es cloud computing ?
Que es cloud computing ?Que es cloud computing ?
Que es cloud computing ?
 
Non Violence And Peace Day 1
Non Violence And Peace Day 1Non Violence And Peace Day 1
Non Violence And Peace Day 1
 
Rock and wall fountains kansas city 816 500-4198
Rock and wall fountains kansas city 816 500-4198Rock and wall fountains kansas city 816 500-4198
Rock and wall fountains kansas city 816 500-4198
 
Amexco kundenanlass 111122 version3
Amexco kundenanlass 111122 version3Amexco kundenanlass 111122 version3
Amexco kundenanlass 111122 version3
 
Hoja de vida
Hoja de vidaHoja de vida
Hoja de vida
 
Pasaporte Semana Santa 2013
Pasaporte Semana Santa 2013Pasaporte Semana Santa 2013
Pasaporte Semana Santa 2013
 
Cold Chain Logistics
Cold Chain LogisticsCold Chain Logistics
Cold Chain Logistics
 
Programa ADIVAC 2012
Programa ADIVAC 2012Programa ADIVAC 2012
Programa ADIVAC 2012
 
Herbicidas ballueca
Herbicidas balluecaHerbicidas ballueca
Herbicidas ballueca
 
Cronograma de jornadas de participación ciudadana urbana. Mayo 2013.
Cronograma de jornadas de participación ciudadana urbana. Mayo 2013.Cronograma de jornadas de participación ciudadana urbana. Mayo 2013.
Cronograma de jornadas de participación ciudadana urbana. Mayo 2013.
 
Mayfran steel belt conveyors for metalworking
Mayfran steel belt conveyors for metalworkingMayfran steel belt conveyors for metalworking
Mayfran steel belt conveyors for metalworking
 
Manual de wordpress para novatos
Manual de wordpress para novatosManual de wordpress para novatos
Manual de wordpress para novatos
 
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...Introduccion a la investigación sobre la movilidad urbana una propuesta desde...
Introduccion a la investigación sobre la movilidad urbana una propuesta desde...
 
BULLISMO: LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. Vanin
BULLISMO:  LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. VaninBULLISMO:  LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. Vanin
BULLISMO: LE FORZE DELL’ORDINE REPRIMONO ED EDUCANO? by C. Vanin
 
Cv instructions
Cv instructionsCv instructions
Cv instructions
 

Similar to 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 RailsKarel Minarik
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010arif44
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Shaer Hassan
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First MileGourab Mitra
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on railspmashchak
 
The Art of AngularJS - DeRailed 2014
The Art of AngularJS - DeRailed 2014The Art of AngularJS - DeRailed 2014
The Art of AngularJS - DeRailed 2014Matt Raible
 
Make your app idea a reality with Ruby On Rails
Make your app idea a reality with Ruby On RailsMake your app idea a reality with Ruby On Rails
Make your app idea a reality with Ruby On RailsNataly Tkachuk
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails PresentationPaul Pajo
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Coursepeter_marklund
 
Why Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfWhy Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfKaty Slemon
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7Karel Minarik
 
Ruby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User GroupRuby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User GroupJose de Leon
 

Similar to Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo) (20)

Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on Rails
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails Introduction
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
 
The Art of AngularJS - DeRailed 2014
The Art of AngularJS - DeRailed 2014The Art of AngularJS - DeRailed 2014
The Art of AngularJS - DeRailed 2014
 
Make your app idea a reality with Ruby On Rails
Make your app idea a reality with Ruby On RailsMake your app idea a reality with Ruby On Rails
Make your app idea a reality with Ruby On Rails
 
Bhavesh ro r
Bhavesh ro rBhavesh ro r
Bhavesh ro r
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails Presentation
 
Road to Rails
Road to RailsRoad to Rails
Road to Rails
 
Learning Rails
Learning RailsLearning Rails
Learning Rails
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
 
Ishani-D
Ishani-DIshani-D
Ishani-D
 
Aspose pdf
Aspose pdfAspose pdf
Aspose pdf
 
Why Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfWhy Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdf
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7
 
Ruby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User GroupRuby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User Group
 

More from 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
 
Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Karel Minarik
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 MinutesKarel 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
 
Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Karel 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
 

More from 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]
 
Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 Minutes
 
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)
 
Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]
 
Ú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
 

Recently uploaded

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 

Recently uploaded (20)

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 

Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

  • 1. Efektivní vývoj webových aplikací v Ruby On Rails Karel Minařík
  • 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. http://data.karmi.cz/webexpo Efektivní vývoj webových aplikací v RubyOnRails
  • 4. 1 Co je Ruby On Rails? Efektivní vývoj webových aplikací v RubyOnRails
  • 5. Webový framework Efektivní vývoj webových aplikací v RubyOnRails
  • 6. Proč používat webový framework? Efektivní vývoj webových aplikací v RubyOnRails
  • 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. 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. Efektivní vývoj webových aplikací v RubyOnRails
  • 10. 2004 2005 2006 Ruby On Rails Zend Framework Merb („lepší než Rails“) Django CakePHP Efektivní vývoj webových aplikací v RubyOnRails
  • 11. Open source, licence MIT Efektivní vývoj webových aplikací v RubyOnRails
  • 12. www.rubyonrails.org Efektivní vývoj webových aplikací v RubyOnRails
  • 13. Efektivní vývoj webových aplikací v RubyOnRails
  • 14.
  • 15.
  • 16. 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
  • 17. 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
  • 19. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  • 20. Basecamp Efektivní vývoj webových aplikací v RubyOnRails
  • 21. 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
  • 22. Efektivní vývoj webových aplikací v RubyOnRails
  • 24. 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
  • 25. Ruby from Other Languages http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ Efektivní vývoj webových aplikací v RubyOnRails
  • 26. Klíčové součásti Ruby On Rails Efektivní vývoj webových aplikací v RubyOnRails
  • 28. 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
  • 29.
  • 30. Model—View—Controller Efektivní vývoj webových aplikací v RubyOnRails
  • 31. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Model–View–Controller Efektivní vývoj webových aplikací v RubyOnRails
  • 32. 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
  • 33. Generátory kódu Efektivní vývoj webových aplikací v RubyOnRails
  • 34. 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
  • 35. 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
  • 36. ActiveRecord Efektivní vývoj webových aplikací v RubyOnRails
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS ActiveRecord — dočasné řešení Objektové databáze Efektivní vývoj webových aplikací v RubyOnRails
  • 47. ActionController Efektivní vývoj webových aplikací v RubyOnRails
  • 48. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Routing — ActionController Rails 1.1 Efektivní vývoj webových aplikací v RubyOnRails
  • 49. 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
  • 50. RESTful — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 51. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 52. 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
  • 53. 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
  • 54. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 55. ActiveResource Efektivní vývoj webových aplikací v RubyOnRails
  • 56. — DHH, RailsConf 2007 Keynote, „The World Of Resources“
  • 57. 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
  • 58. 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
  • 59. ActionView Efektivní vývoj webových aplikací v RubyOnRails
  • 60. 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
  • 61. 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
  • 62. Automatizované testování Efektivní vývoj webových aplikací v RubyOnRails
  • 63. Proč psát testy? Proč nepsat testy víme — není čas, nejsou peníze, … Efektivní vývoj webových aplikací v RubyOnRails
  • 64. 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
  • 65. 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
  • 66. 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
  • 67. 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
  • 68. 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
  • 69. 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
  • 70. 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
  • 71. Co jsme vynechali? Efektivní vývoj webových aplikací v RubyOnRails
  • 72. 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
  • 73. Deployment Rails aplikací Efektivní vývoj webových aplikací v RubyOnRails
  • 74. 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
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. 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
  • 79. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS Rails hosting s mod_rails zdarma na zkoušku Efektivní vývoj webových aplikací v RubyOnRails
  • 80. KLÍČOVÉ SOUČÁSTI RUBY ON RAILS http://free.railshosting.cz Efektivní vývoj webových aplikací v RubyOnRails
  • 81. Další zdroje a informace Efektivní vývoj webových aplikací v RubyOnRails
  • 82. 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
  • 83. 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
  • 84. 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
  • 85. 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
  • 86. 2 Živá ukázka tvorby aplikace v Rails Efektivní vývoj webových aplikací v RubyOnRails
  • 87. www.tadalist.com od 37Signals Efektivní vývoj webových aplikací v RubyOnRails
  • 88. $ 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
  • 89. Děkuji!  www.karmi.cz