jiří hradil kyberie s.r.o. [email protected] · sessions ukládat do databáze (rails default)...
TRANSCRIPT
![Page 1: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/1.jpg)
Ruby on Rails: zapomeňte na Javu
Jiří Hradil
Kyberie s.r.o.
http://www.hradil.cz
28.2.2011, CZJUG, Praha
`
![Page 2: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/2.jpg)
2
Java sága, persistence I.
● Kyberie, rok 2004● Cíl: persistence pro Java webové aplikace● JDBC – zřejmě by stačil, tlak zvenčí● Hibernate, prototyp, složité v porovnání s PHP● Zahozeno Hibernate, chceme víc „standard“,
chyba● EJB 2.1, EJB 3.0, aplikační kontejnery,
deployment, XML, zvrat ve složitosti● Stále probíhá interní výzkum
![Page 3: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/3.jpg)
3
Java sága, persistence II.
● Anotace v EJB 3.0, další vrstva složitosti● Aplikační kontejnery:
● JBoss – extrémně složitý● Glassfish – grafické klikátko, hezké, první verze
nestabilní● Rozdíly v deploymentu, nedostatek zkušeností
● Návrat k „jednoduššímu“ ORM, Toplink, Hibernate, JPA
● 2 roky ztracené objevováním „standardů“● Výsledek - zavržení EJB, složité
![Page 4: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/4.jpg)
4
Java sága, prezentační vrstva I.
● JSP – nejblíže PHP, jednoduché● JSTL – knihovny tagů – standardní tagy Sunu,
vlastní tagy přidaly složitost● JSF – naprostá katastrofa, zkušenosti s HTML
k ničemu● JSF – konfigurace akcí přes XML● JSF 1.0 a 1.1 – vlastní tagy – prakticky
nemožné● „Standard“ zklamal
![Page 5: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/5.jpg)
5
Java sága, prezentační vrstva II.
● Pokus o odlehčení● Stripes – super, lze se je naučit za 1 den● Stripes - několik chyb, malá komunita (pomalé
či žádné odpovědi), neměli jsme odvahu v tom dělat projekt v řádu desítek mil.
● Apache Wicket – nejlepší web framework● Apache Wicket - viz moje přednáška na CZJUG
![Page 6: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/6.jpg)
6
Java sága, špagety I.
● Jak spojit vše dohromady?● Spring – nutno vybrat si, co vlastně
potřebujeme● Další závislosti● Spring transakce – složité, vzpomínání na EJB● Základ funguje, ale drahé debugování● Ovládnutí jen Springu = několik měsíců
![Page 7: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/7.jpg)
7
Java sága, špagety II.
● Logování● Java Logger● log4j● slf4j
● Sestavení● Apache Ant – těžké, xml● Maven – asi nejlepší, opět stupidní xml
● Ostatní● relační db, testování, nepřetržitá integrace
![Page 8: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/8.jpg)
8
Java sága, shrnutí
● Finální kombinace● Hibernate Entity Manager 3.4.0.GA - persistence● Hibernate Search 3.1.0.GA – fulltext● Apache Maven 2.0.9 – project management● Apache Wicket 1.3.5 – prezentační vrstva● Spring 2.5.5 – lepidlo● PostgreSQL 8.2-relační databáze
● Ovládnutí = 1 rok studia, pokud existuje leadership = hrubá investice asi 500 tis. na hlavu, nepočítám náklady ušlé příležitosti
![Page 9: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/9.jpg)
9
Požadavky na sw vývoj?
● Rychlé uvedení na trh, v řádu dnů až týdnů● Zmenšit bariéry vstupu na trh● Minimum školení, nový programátor musí být
efektivní ASAP● Agilní vývoj
● nelze předvídat budoucnost, externí faktory● udržet se naživu = být rychlý a efektivní● okamžitá reakce, nepřetržitý deployment
● Java pro web je pro agilní vývoj nevhodná
![Page 10: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/10.jpg)
10
Osvícení, Ruby on Rails
● http://rubyonrails.org/● „tvorba webu, která nebolí“● web framework, MVC● Komplet infrastruktura
![Page 11: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/11.jpg)
11
Používané verze
● Ruby 1.8.7● Rails 2.3.11 (aktuální je 3.0.4)● 3.x dále zjednodušuje, viz CZ Podcast 45● PostgreSQL 8.4.4
![Page 12: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/12.jpg)
12
Rails
● Nástroj pro psaní web aplikací● Balíček (gem) instalovaný nad Ruby● Komplet instalace a spuštění:
● gem install rails● rails projekt● cd projekt● ./script/server● http://localhost:3000
![Page 13: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/13.jpg)
13
Proč RoR? Ruby
● Objektový jazyk – vše je objekt, neexistují primitivní typy
● Dynamické datové typy, duck typing● Interpretovaný (nekompilujeme)● Otevřený – open classes - ideální pro DSL,
např. bez problémů můžeme přímo do String přidat vlastní metodu nebo přepsat stávající
● Zaměřeno na lidi, nikoli na rychlost● Cílem je psát jednoduchý a čitelný kód
![Page 14: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/14.jpg)
14
Proč RoR? Rake
● Task management tool● Ruby syntaxe● Obdoba make nebo ant● Obsluha databáze, spuštění testů, generace
dokumentace, logy, cache, možnost napsat vlastní úlohy
![Page 15: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/15.jpg)
15
Proč RoR? Migrace
● Verzovaný přechod databáze od jednoho stavu ke druhému
● Stav databáze má svůj timestamp● Jdeme dopředu a dozadu● Nejen změna schématu, lze měnit i data
![Page 16: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/16.jpg)
16
Proč RoR? Scaffolding
● „Lešení“● Ideální prototypování● Napíšu název třídy, atributy, typ a vše se
vygeneruje● ./script/generate scaffold contact name:string
note:text● Vytvoří MVC, testy, migrace
![Page 17: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/17.jpg)
17
Proč RoR? Active Record
● ORM v Rails● Convention over Configuration● Zná názvy tabulek, názvy atributů, datové typy● Odpadá dvojí deklarace jako v JPA či Hibernate
(jednou ve třídě, podruhé v DB)● Dynamické findery● Viz Active Record je nejlepší ORM na
www.hradil.org
![Page 18: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/18.jpg)
18
Ukázka
● Vytvoření projektu● Scaffold, CRUD● Migrace tam a zpět● MVC, REST● Console● Active Record, dynamické findery● 3 prostředí, 3 databáze, database.yml● 3 druhy testů, unit, funcionals, integration● Fixtures, yaml
![Page 19: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/19.jpg)
19
Deploy
● Capistrano● Na všech serverech v clusteru je stejný uživatel
a stejná struktura● Capistrano při deploy zkopíruje scripty na
všechny servery najednou a udělá restart● Umí vzdáleně spouštět cokoli (migrace,
nastartovat jiné servery, poslat mail, dát stránku o nedostupnosti, apod.)
● Tasky v Ruby● cap aplikace deploy
![Page 20: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/20.jpg)
20
Škálování
● Jednoduché, rychlé, funguje● Share nothing, servery o sobě nevědí● Před servery dát balancer (apache, nginx)● Sessions ukládat do databáze (rails default)● Sdílení logů řešit před linux nástroje (rsyslog),
jdou pak na 1 server● Jediné slabé místo jsou relační databáze, trend
jde k nosql databázím (mongodb, riak)● Lze používat memcached, do db sahat jen při
zápisu
![Page 21: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/21.jpg)
21
Phusion Passenger
● http://www.modrails.com/● Zadara, lze koupit support či „enterprise ruby“● Modul pro Apache a nginx● Nulová údržba● Pokud rails aplikace spadne, web server stále
běží, při dalším requestu restart● Deploy = upload aplikace do web rootu● Ideální spojení s Capistrano● Doporučeno autory Ruby on Rails
![Page 22: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/22.jpg)
22
Nepřetržitá integrace, Cerberus
● http://cerberus.rubyforge.org/● Lehký, žádné GUI, textový výstup● Git, svn, perforce, mercurial, atd.● cerberus add (DIR|SVN_URL)
APPLICATION_NAME=aplikace [email protected]
● cerberus build aplikace
![Page 23: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/23.jpg)
23
Hosting
● Heroku, http://heroku.com/● Engine Yard, http://www.engineyard.com/
![Page 24: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/24.jpg)
24
Mýty a legendy
● Ruby je pomalé● Není staticky typované = více chyb● RoR není dost „enterprise“● Nemá support velkých firem● Nikdy jsem o tom neslyšel, takže to nefunguje● Jednobarevný svět
![Page 25: Jiří Hradil Kyberie s.r.o. jirka@hradil.cz · Sessions ukládat do databáze (rails default) Sdílení logů řešit před linux nástroje (rsyslog), jdou pak na 1 server Jediné](https://reader033.vdocuments.net/reader033/viewer/2022060307/5f09c8ed7e708231d4287b65/html5/thumbnails/25.jpg)
25
Otázky a odpovědi
?