Slide 1

Slide 1 text

Budowanie aplikacji webowej w Ruby Hobbit

Slide 2

Slide 2 text

O mnie Krzysztof Wawer! [email protected]! Github: wafcio! ! Neubloc Polska

Slide 3

Slide 3 text

Ruby on Rails Web Serwer Ruby on Rails Nasza aplikacja

Slide 4

Slide 4 text

Ruby on Rails Web Serwer Ruby on Rails Nasza aplikacja Rack

Slide 5

Slide 5 text

Ruby on Rails - zależności rails actionmailer (4.1.4 - 62 112 B) mail actionpack (4.1.4 - 651 917 B) AbstractController, ActionController, ActionDispatch rack rack-test actionview (4.1.4 - 624 372 B) builder erubis activemodel (4.1.4 - 159 322 B) builder activerecord (4.1.4 - 1 143 044 B) arel ! activesupport (4.1.4 - 1 475 624 B) cache, core_ext, json, multibyte, notyfikacje, konwersja liczb i18n jon minitest thread_safe tzinfo bundler railties (4.1.4 - 368 897 B) rake thor sprockets-rails RAZEM 4 485 298 B ~ 4,28 MB

Slide 6

Slide 6 text

Ruby on Rails Konwencja nad Konfiguracją! ! Twórcy => Odtwórców

Slide 7

Slide 7 text

Ruby on Rails ??? Czy na pewno rozumiemy większość kodu RoR ?

Slide 8

Slide 8 text

Ruby on Rails ??? Czy potrafimy optymalnie wykorzystać RoR ?

Slide 9

Slide 9 text

Ruby on Rails ??? A może coś nam przeszkadza w RoR ?

Slide 10

Slide 10 text

Ruby off Rails Web Serwer Ruby on Rails Nasza aplikacja Rack

Slide 11

Slide 11 text

Ruby off Rails Mikro Biblioteki! Piotr Solnica: https://www.youtube.com/ watch?v=urUEB8Kz6jY! Wykorzystanie tylko potrzebnych gemów! Zwiększenie wydajności

Slide 12

Slide 12 text

Rack Rack Web Serwer Nasza aplikacja https://github.com/rack/rack

Slide 13

Slide 13 text

Aplikacja Rack require 'rack' ! class HelloWorld def call(env) [200, {'Content-Type' => 'text/plain'}, 'Hello World!'] end end ! run HelloWorld.new

Slide 14

Slide 14 text

Rack Rack Web Serwer Nasza aplikacja https://github.com/rack/rack Lekki framework

Slide 15

Slide 15 text

Niektóre frameworki Brooklyn, Cuba, Hobbit, Lotus, Nancy, NYNY, Mustermann, Ramaze, Rambutan, Scorched, Sinatra! https://github.com/luislavena/bench-micro! ! Cuba, Hobbit, Jellyfish, Sinatra, Substation, Subway! http://microrb.com/#framework!

Slide 16

Slide 16 text

Hobbit Patricio Mac Adden [email protected] Github: patriciomacadden ! Pierwszy commit: 11 IV 2013

Slide 17

Slide 17 text

Hobbit pierwsza nazwa: bonsai, ale … ! musi być szybki bardzo prosty, tylko routing rozszerzalny zero konfiguracji ! http://www.sitepoint.com/ruby-microframeworks-round/

Slide 18

Slide 18 text

hobbit - źródło https://github.com/patriciomacadden/hobbit v0.6.0, 12 VI 2014 - 9 239 B ~ 9,02 KB hobbit.rb - 4 linii hobbit/base.rb - 93 linii hobbit/request.rb - 10 linii hobbit/response.rb - 40 linii Razem: 147 linii

Slide 19

Slide 19 text

Hello World require 'hobbit' ! class HelloWorld < Hobbit::Base get '/' do 'Hello World!' end end ! run HelloWorld.new

Slide 20

Slide 20 text

hobbit-contrib - źródło https://github.com/patriciomacadden/hobbit-contrib v0.7.0, 10 VII 2014 - 5 280 B ~ 5,16 KB hobbit/contrib.rb - 13 linii hobbit/environment.rb - 15 linii hobbit/error_handling.rb - 27 linii hobbit/filter.rb - 73 linii hobbit/mote.rb - 42 linii hobbit/render.rb - 55 linii hobbit/session.rb - 7 linii Razem: 232 linii

Slide 21

Slide 21 text

hobbit-contrib - źródło https://github.com/patriciomacadden/hobbit-contrib environment.rb - development?, production? error_handling.rb - chwyta wyjątki filter.rb - after, before mote.rb - renderuje widoki przy użyciu Mote render.rb - renderuje widoki przy użyciu Tilt session.rb - łatwy dostęp do zmiennych zapisanych w sesji

Slide 22

Slide 22 text

Format HTML require 'hobbit' require 'hobbit/render' require 'tilt/haml' ! class HelloWorld < Hobbit::Base def template_engine 'haml' end ! get '/' do render 'index', {}, layout: false end end ! run HelloWorld.new

Slide 23

Slide 23 text

Co zrobić gdy czegoś brakuje ? gemy dla Racka gemy dla Sinatry activesupport ???

Slide 24

Slide 24 text

Hobbit - ataki brak obrony przed atakami zalecane wykorzystanie: https://github.com/rkh/rack-protection Cross Site Request Forgery Cross Site Scripting Clickjacking Directory Traversal Session Hijacking IP Spoofing

Slide 25

Slide 25 text

Hobbit Application Template https://github.com/patriciomacadden/hat i18n tilt sprockets better_errors rake rack-test, minitest

Slide 26

Slide 26 text

Prekompilacja assetów require 'rake/sprocketstask' require 'uglifier' ! Rake::SprocketsTask.new do |t| environment = Sprockets::Environment.new environment.append_path(…) environment.js_compressor = :uglify environment.css_compressor = :scss ! t.environment = environment t.manifest = Sprockets::Manifest.new(environment, "public/assets/manifest.json") ! t.output = 'public/assets' t.assets = %w(application.js application.css) end rake assets # Compile assets ! rake clean_assets # Clean old assets ! rake clobber_assets # Remove all assembler

Slide 27

Slide 27 text

Przykład Na podstawie: https://github.com/ryant523/blog haml sass rake sequel pony

Slide 28

Slide 28 text

Dziękuje Pytania ???