Ruby On Rails - 3. Rails Addons

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Ruby On Rails - 3. Rails Addons - Presentation Transcript

    1. Ruby on Rails Web Development that doesn‘t hurt Dezember 2008 www.xing.com/profile/Christian_Feser www.xing.com/profile/Michael_Kram www.xing.com/profile/Jakob_Schroeter www.Marc-Seeger.de
    2. 2 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wissenskasten Generatoren Views Businesslogik Helper ERB-Templates Model Assoziationen Console Validatoren Forms Routing REST Migrations Partial Layout Controller Webservices Abhängigkeiten
    3. 3 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger agenda • has_many • Validatoren • Testing • Security • Performance • Deployment • Diskussion
    4. has_many Wann wird es aufgerufen?
    5. 5 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Once upon a time… http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html
    6. 6 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Magic!
    7. 7 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Wait a second…
    8. 8 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger What? „attribute functions“
    9. 9 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger When? require(“my_model.rb“)
    10. 10 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger When II? My Code Testing it
    11. 11 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger require? It wasn‘t me!
    12. 12 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Rails::Initializer
    13. 13 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger …or the lazy way… • require_association_class()
    14. 14 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger In general… • This is what you can expect to be loaded: •Models •Views •Controllers •Helpers •lib/
    15. 15 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How? Meta-Programming! look at input manipulate code
    16. 16 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
    17. Testing Fast, Sexy and Svelte
    18. Was ist TDD?
    19. 19 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger TDD - Test-Driven Development
    20. 20 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Überblick • Unit-Test: Hiermit werden hauptsächlich Models getestet. • Functional-Tests: Setzt den Fokus auf das Testen von Controllern und Views. • Integration-Tests: Dient zum Testen der Gesamtfunktionalität der Rails-Applikation.
    21. 21 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Was macht Rails für uns? • Struktur anlegen: ▫ Unit Tests (test/unit) ▫ Functional Tests (test/functional) ▫ Integration Tests (test/integration) ▫ Test Fixtures (test/fixtures) • Umgebung handeln:  database.yml
    22. 22 Test - Verzeichnisse Logisch Physikalisch
    23. 23 Fixtures • Testdaten, die Rails vor den Tests in die Modelle lädt
    24. 24 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Unit Testing Class • Subclass von ActiveSupport::TestCase class ▫ class PersonTest < ActiveSupport::TestCase • Benötigt test_helper ▫ require File.dirname(__FILE__) + '/../test_helper' • Test Methoden beginnen mit test_ ▫ test_my_method • Mit Assertion Methoden Überprüfung auf true ▫ assert_equal 3, Item.count
    25. 25 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Unit Test - Demo
    26. 26 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Autotest ZenTest  http://zentest.rubyforge.org/
    27. 27 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Functional-Test Testen, ob… • eine bestimmte Zeichenkette angezeigt wird. • der Controller ein bestimmtes Template anzeigt. • der Controller richtig weiterleitet. • ob die Seite korrekt geladen worden ist. • ob die richtigen Parameter übergeben worden sind. • das Routing zu dem Controller korrekt funktioniert. •…
    28. 28 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Functional-Test Demo
    29. 29 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
    30. 30 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Integration-/Acceptance Test 1. Seite »flights/new« aufrufen. 2. Überprüfen, ob die Seite fehlerfrei aufgerufen werden konnte (HTTP-Status = 200). 3. Überprüfen, ob das Template »flights/new« geladen wurde. 4. Flight-Formulardaten an die Seite »/flights« schicken mit der HTML-Methode POST. 5. Der Weiterleitung folgen. 6. Überprüfen, ob die Seite ohne Fehler aufgerufen werden konnte (HTTP-Status = 200). 7. Überprüfen, ob das Template »flights/show« geladen wurde.
    31. 31 Integration-/Acceptance Test 1. Seite »flights/new« aufrufen. 2. Überprüfen, ob die Seite fehlerfrei aufgerufen werden konnte (HTTP-Status = 200). 3. Überprüfen, ob das Template »flights/new« geladen wurde. 4. Flight-Formulardaten an die Seite »/flights« schicken mit der HTML-Methode POST. 5. Der Weiterleitung folgen. 6. Überprüfen, ob die Seite ohne Fehler aufgerufen werden konnte (HTTP-Status = 200). 7. Überprüfen, ob das Template »flights/show« geladen wurde.
    32. 32 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger SeleniumHQ • DEMO • http://seleniumhq.org/projects/on-rails/
    33. Security …on Rails
    34. 34 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger
    35. 35 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Session hijacking Session ID
    36. 36 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger CookieStore • Cookie ▫ = Session ID + SHA512(Session ID+ ServerSideSecret) ▫  no tampering • Encryption of cookie possible ▫  user can‘t see what you put in the cookie • Especially for forms: ▫ ActionController::RequestForgeryProtection
    37. 37 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Example source: http://api.rubyonrails.com/classes/ActionController/RequestForgeryProtection/ClassMethods.html
    38. 38 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger SQL Injection Source: http://xkcd.com/327/
    39. 39 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger SQL Injection automatically applies SQL Escaping (' , \" , NULL, …) Model.find(id) Model.find_by_something(something)
    40. 40 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger XSS <script type=\"text/javascript\">alert(\"XSS\");</script>
    41. 41 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger XSS • html_escape() • sanitize(): • Safe ERB plugin ▫ checks that the proper methods are used if a string is „tainted“ (read from I/O)
    42. Performance Rails on Speed
    43. 43 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger The known… • Optimize your code • Built-in Features verwenden • Nur Daten laden, die auch verwendet werden Order.find(:all, :include => [:person]) • Datenbank-Features nutzen ▫ Stored procedures… http://antoniocangiano.com/2007/02/10/top-10-ruby-on-rails-performance-tips/
    44. 44 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Caching is good • File-Caching für Controller und Views ▫ Einstellung im Environment
    45. 45 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Caching im View • Page-Caching ▫ Im Controller: caches_page :index, :show expire_page(orders_path) • Action-Caching ▫ Im Controller: caches_action :index, :show expire_action(orders_url)
    46. 46 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Caching im View • Fragment-Caching <% cache(:action => \"list\") do %> … <% end %> expire_fragment(:controller => 'orders', :action => 'list')
    47. 47 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger More caching • Im Model: cached_model ▫ Plugin für Rails ▫ überschreibt model.find-Methoden ▫ spart DB-Queries • Session Store http://rubyfurnace.com/gems/cached_model
    48. 48 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger memcached • generic, high-performance, distributed memory object caching system for speeding up dynamic web applications • skalierbar, da globaler Cache ▫ in Environment-Konfig: config.cache_store = :mem_cache_store http://www.danga.com/memcached/
    49. Rails scales Really?
    50. 50 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Yep, it does! http://limited-overload.de/assets/2006/11/3/Rails-Konferenz_2006.pdf
    51. 51 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Frontend tuning • CSS- und JavaScript-Dateien zusammenfügen ▫ javascript_include_tag ▫ stylesheet_link_tag javascript_include_tag \"prototype\", \"cart\", \"checkout\", :cache => \"shop“ <script type=\"text/javascript\" src=\"/javascripts/shop.js\"></script> • Gzip-Komprimierung aktivieren
    52. 52 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger File-Requests auf mehrere (virtuelle) Server verteilen • Environment-Einstellung für javascript_include_tag, stylesheet_link_tag und image_tag config.action_controller.asset_host = „http://files%d.yourhost.de“ <img src=\"http://files0.yourhost.de /images/ruby.png„ /> <img src=\"http://files1.yourhost.de /images/rails.png„ />
    53. 53 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Entwicklungs- Hardware- kosten kosten
    54. Deployment …get yourself some Rails!
    55. 55 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger In the beginning Part 1 1. cd /path/to/your/rails/app 2. mongrel_rails cluster::start #curl -I 127.0.0.1:8000  HTTP/1.1 200 OK Connection: close Date: Tue, 11 Dec 2008 23:09:13 GMT Status: 200 OK Server: Mongrel 1.0.1 Content-Type: text/html Content- Length: 0
    56. 56 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger In the beginning Part 2
    57. 57 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Today: # gem install passenger # passenger-install-apache2-module
    58. 58 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Passenger (= mod_rails = mod_passenger)
    59. 59 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Configuration
    60. 60 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger JRuby Tomcat Glassfish
    61. 61 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Glassfish First: gem install glassfish Then: cd /my/rails/app glassfish
    62. 62 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Tomcat (or anything else…) • gem install warbler • cd /my/rails/app • warble
    63. 63 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Yes, it‘s the actual logo…
    64. 64 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Diskussion
    65. 65 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Quellen • Fischer, Jens-Christian: Professionelle Webentwicklung mit Ruby on Rails 2 (2008): mitp • http://errtheblog.com/posts/25-memcaching-rails • http://antoniocangiano.com/2007/02/10/top-10-ruby-on-rails- performance-tips/ • http://api.rubyonrails.org/ • Morsy, Hussein; Otto, Tanja: Ruby on Rails 2 – Das Entwickler-Handbuch (2008): Galileo Press • Wartala, Ramon; Krutisch, Jan: Webanwendungen mit Ruby on Rails (2007): Addision-Wesley Verlag • Sang Shin: javapassion.com/rubyonrails/ • http://wiki.rubyonrails.com/rails/pages/HowtosTesting • Bruce, Tate; Curt Hibbs (2006): Durchstarten mit Ruby on Rails • http://zentest.rubyforge.org/ • http://seleniumhq.org/projects/on-rails
    SlideShare Zeitgeist 2009

    + jakob.schroeterjakob.schroeter Nominate

    custom

    1329 views, 2 favs, 2 embeds more stats

    A 90 min addon for Ruby On Rails Programming by Chr more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1329
      • 1323 on SlideShare
      • 6 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 20
    Most viewed embeds
    • 4 views on http://www.marc-seeger.de
    • 2 views on http://marc-seeger.de

    more

    All embeds
    • 4 views on http://www.marc-seeger.de
    • 2 views on http://marc-seeger.de

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories