Rails_Zaawansowane_programowanie_railzp.pdf

(446 KB) Pobierz
Rails. Zaawansowane
programowanie
Autor: Brad Ediger
T³umaczenie: Pawe³ Gonera
ISBN: 978-83-246-1724-1
Tytu³ orygina³u:
Advanced Rails
Format: 168x237 , stron: 336
Twórz zaawansowane projekty w Rails!
Jak zadbaæ o bezpieczeñstwo?
Jak zapewniæ wydajnoœæ Twojej aplikacji?
Jak stworzyæ i utrzymaæ du¿y projekt w Rails?
Ruby on Rails przebojem wdar³ siê na rynek szkieletów aplikacji internetowych.
Stworzony w architekturze MVC z wykorzystaniem popularnego jêzyka Ruby, zosta³
entuzjastycznie przyjêty przez spo³ecznoœæ programistów. G³ówne za³o¿enia autora tego
projektu, Davida Heinemeiera Hanssona, to szybkoœæ, ³atwoœæ i przyjemnoœæ tworzenia
kodu. Ruby on Rails jest dojrza³ym rozwi¹zaniem, wykorzystywanym przez wiele firm
w aplikacjach internetowych, tworzonych pod k¹tem ich specyficznych potrzeb. Liczba
aplikacji, które powsta³y z wykorzystaniem tego szkieletu, œwiadczy o jego wysokiej
jakoœci oraz niew¹tpliwie ma wp³yw na wzrost popularnoœci samego jêzyka Ruby.
„Rails.
Zaawansowane programowanie” porusza te tematy, które Wy, programiœci,
lubicie najbardziej! Dziêki tej ksi¹¿ce dowiesz siê, w jaki sposób wykorzystaæ gotowe
wtyczki oraz jak stworzyæ nowe. Nauczysz siê stosowaæ zaawansowane funkcje bazy
danych oraz pod³¹czaæ siê jednoczeœnie do wielu baz. Po lekturze tego podrêcznika
bez problemu zapewnisz swojej aplikacji najwy¿szy poziom bezpieczeñstwa, optymaln¹
wydajnoœæ i skalowalnoœæ. Autor wskazuje tutaj równie¿ niezwykle interesuj¹ce
kwestie, dotycz¹ce projektowania du¿ych aplikacji, wykorzystania systemów kontroli
wersji oraz utrzymywania w³aœciwej struktury projektu.
Przypomnienie i omówienie podstawowych elementów Ruby i Rails
Stosowanie ActiveSupport oraz RailTies
Zastosowanie i projektowanie wtyczek
Zaawansowane wykorzystanie baz danych
Uwierzytelnianie za pomoc¹ LDAP
Bezpieczne szyfrowanie hase³
Bezpieczne przetwarzanie formularzy i danych u¿ytkownika
Zapewnienie wydajnoœci
Skalowanie architektury
Wykorzystywanie us³ug Web
Tworzenie wielojêzycznych aplikacji
Zarz¹dzanie du¿ymi projektami
U¿ywanie systemów kontroli wersji
Poznaj wszystkie funkcje Ruby on Rails!
Spis tre ci
Wst�½p ........................................................................................................................................5
1. Techniki podstawowe ...................................................................................................9
Czym jest metaprogramowanie?
Podstawy Ruby
Techniki metaprogramowania
Programowanie funkcyjne
Przykäady
Propozycje dalszych lektur
9
12
30
41
46
49
2. ActiveSupport oraz RailTies ........................................................................................ 51
Ruby, jakiego nie znamy
Jak czytaè kod?
ActiveSupport
Core Extensions
RailTies
Propozycje dalszych lektur
51
54
61
65
79
81
3. Wtyczki Rails ................................................................................................................83
Wtyczki
Tworzenie wtyczek
Przykäad wtyczki
Testowanie wtyczek
Propozycje dalszych lektur
83
87
89
94
97
4. Bazy danych .................................................................................................................99
Systemy zarzñdzania bazñ danych
Du e obiekty (binarne)
Zaawansowane funkcje baz danych
Podäñczanie do wielu baz danych
Buforowanie
Wyrównywanie obciñ enia i wysoka dostöpno è
LDAP
Propozycje dalszych lektur
99
104
112
118
120
121
126
127
3
5. Bezpiecze stwo ......................................................................................................... 129
Problemy w aplikacji
Problemy w sieci WWW
Wstrzykiwanie SQL
rodowisko Ruby
Propozycje dalszych lektur
129
138
145
146
147
6. Wydajno ë .................................................................................................................. 149
Narzödzia pomiarowe
Przykäad optymalizacji Rails
Wydajno è ActiveRecord
Skalowanie architektury
Inne systemy
Propozycje dalszych lektur
150
156
165
174
181
183
7. REST, zasoby oraz us ugi Web .................................................................................. 185
Czym jest REST?
Zalety architektury REST
REST w Rails
Analiza przypadku — Amazon S3
Propozycje dalszych lektur
185
203
207
226
230
8. i18n oraz L10n ............................................................................................................ 231
Lokalizacje
Kodowanie znaków
Unicode
Rails i Unicode
Rails L10n
Propozycje dalszych lektur
231
232
233
235
243
262
9. Wykorzystanie i rozszerzanie Rails ..........................................................................263
Wymiana komponentów Rails
Wykorzystanie komponentów Rails
Udziaä w tworzeniu Rails
Propozycje dalszych lektur
263
274
279
285
10. Du e projekty .............................................................................................................287
Kontrola wersji
ledzenie bäödów
Struktura projektu
Instalacja Rails
Propozycje dalszych lektur
287
298
299
305
311
Skorowidz ............................................................................................................................. 313
4
_
Spis tre ci
ROZDZIA 1.
Techniki podstawowe
Do osiñgniöcia niezawodno ci jest wymagana prostota.
Edsger W. Dijkstra
Od pierwszego wydania w lipcu 2004 roku rodowisko Ruby on Rails stale zdobywa popu-
larno è. Rails przyciñga programistów PHP, Java i .NET swojñ prostotñ — architekturñ
model-widok-kontroler (MVC), rozsñdnymi warto ciami domy lnymi („konwencja nad kon-
figuracjñ”) oraz zaawansowanym jözykiem programowania Ruby.
rodowisko Rails miaäo przez pierwszy rok lub dwa säabñ reputacjö z uwagi na braki w do-
kumentacji. Luka ta zostaäa wypeäniona przez tysiñce programistów, którzy korzystali ze
rodowiska Ruby on Rails, wspóätworzyli je i pisali na jego temat, jak równie dziöki pro-
jektowi Rails Documentation (http://railsdocumentation.org). Dostöpne sñ tysiñce blogów, które
zawierajñ samouczki oraz porady na temat programowania w Rails.
Celem tej ksiñ ki jest zebranie najlepszych praktyk oraz wiedzy zgromadzonej przez rodo-
wisko programistów Rails i zaprezentowanie ich w äatwej do przyswojenia, zwartej formie.
Poszukiwaäem ponadto tych aspektów programowania dla WWW, które sñ czösto niedoce-
niane lub pomijane przez rodowisko Rails.
Czym jest metaprogramowanie?
Rails udostöpnia metaprogramowanie dla mas. Choè nie byäo to pierwsze zastosowanie za-
awansowanych funkcji Ruby, to jednak jest ono chyba najbardziej popularne. Aby zrozumieè
dziaäanie Rails, konieczne jest wcze niejsze zapoznanie siö z tymi mechanizmami Ruby, które
zostaäy wykorzystane w tym rodowisku. W tym rozdziale przedstawione zostanñ podsta-
wowe mechanizmy zapewniajñce dziaäanie technik przedstawianych w pozostaäych rozdzia-
äach ksiñ ki.
Metaprogramowanie
to technika programowania, w której kod jest wykorzystywany do
tworzenia innego kodu, bñd dokonania introspekcji samego siebie. Przedrostek
meta
(z gre-
ki) wskazuje na abstrakcjö; kod wykorzystujñcy techniki metaprogramowania dziaäa jedno-
cze nie na dwóch poziomach abstrakcji.
Metaprogramowanie jest wykorzystywane w wielu jözykach, ale jest najbardziej popularne
w jözykach dynamicznych, poniewa majñ one zwykle wiöcej funkcji pozwalajñcych na ma-
nipulowanie kodem jako danymi. Pomimo tego, e w jözykach statycznych, takich jak C# lub
9
Java, dostöpny jest mechanizm refleksji, to nie jest on nawet w czö ci tak przezroczysty, jak
w jözykach dynamicznych, takich jak Ruby, poniewa kod i dane znajdujñ siö w czasie dzia-
äania aplikacji na dwóch osobnych warstwach.
Introspekcja jest zwykle wykonywana na jednym z tych poziomów.
Introspekcja syntak-
tyczna
jest najni szym poziomem introspekcji — pozwala na bezpo redniñ analizö tekstu
programu lub strumienia tokenów. Metaprogramowanie bazujñce na szablonach lub ma-
krach zwykle dziaäa na poziomie syntaktycznym.
Ten typ metaprogramowania jest wykorzystany w jözyku Lisp poprzez stosowanie
S-wyra eþ
(bezpo redniego täumaczenia drzewa abstrakcji skäadni programu) zarówno w przypadku kodu,
jak i danych. Metaprogramowanie w jözyku Lisp wymaga intensywnego korzystania z
makr,
które sñ tak naprawdö szablonami kodu. Daje to mo liwo è pracy na jednym poziomie; kod
i dane sñ reprezentowane w ten sam sposób, a jedynym, co odró nia kod od danych, jest to,
e jest on warto ciowany. Jednak metaprogramowanie na poziomie syntaktycznym ma swoje
wady. Przechwytywanie zmiennych oraz przypadkowe wielokrotne warto ciowanie jest bez-
po redniñ konsekwencjñ umieszczenia kodu na dwóch poziomach abstrakcji dla tej samej prze-
strzeni nazw. Choè dostöpne sñ standardowe idiomy jözyka Lisp pozwalajñce na uporanie siö
z tymi problemami, to jednak sñ one kolejnymi elementami, których programista Lisp musi
siö nauczyè i pamiötaè o nich.
Introspekcja syntaktyczna w Ruby jest dostöpna za po rednictwem biblioteki
ParseTree
, która
pozwala na täumaczenie kodu ródäowego Ruby na S-wyra enia
1
. Interesujñcym zastosowa-
niem tej biblioteki jest Heckle
2
, biblioteka uäatwiajñca testowanie, która analizuje kod ródäowy
Ruby i zmienia go poprzez modyfikowanie ciñgów oraz zmianö warto ci
true
na
false
i odwrotnie. W zaäo eniach, je eli nasz kod jest odpowiednio pokryty testami, ka da mody-
fikacja kodu powinna zostaè wykryta przez testy jednostkowe.
Alternatywñ dla introspekcji syntaktycznej jest dziaäajñca na wy szym poziomie
introspekcja
semantyczna,
czyli analiza programu z wykorzystaniem struktur danych wy szego pozio-
mu. Sposób realizacji tej techniki ró ni siö w ro nych jözykach programowania, ale w Ruby
zwykle oznacza to operowanie na poziomie klas i metod — tworzenie, modyfikowanie i alia-
sowanie metod; przechwytywanie wywoäaþ metod; manipulowanie äaþcuchem dziedzicze-
nia. Techniki te sñ zwykle bardziej zwiñzane z istniejñcym kodem ni metody syntaktyczne,
poniewa najczö ciej istniejñce metody sñ traktowane jako czarne skrzynki i ich implementa-
cja nie jest swobodnie zmieniana.
Nie powtarzaj si�½
Na wysokim poziomie metaprogramowanie jest przydatne do wprowadzania
zasady DRY
(ang.
Don’t Repeat Yourself
— „nie powtarzaj siö”). Zgodnie z tñ technikñ, nazywanñ równie
„Raz i tylko raz”, ka dy element informacji musi byè zdefiniowany w systemie tylko raz.
Powielanie jest zwykle niepotrzebne, szczególnie w jözykach dynamicznych, takich jak Ruby.
Podobnie jak abstrakcja funkcjonalna pozwala nam na unikniöcie powielania kodu, który jest
taki sam lub niemal taki sam, metaprogramowanie pozwala nam uniknñè podobnych kon-
cepcji, wykorzystywanych w aplikacji.
1
2
http://www.zenspider.com/ZSS/Products/ParseTree.
http://rubyforge.org/projects/seattlerb.
10
_
Rozdzia 1. Techniki podstawowe
Zgłoś jeśli naruszono regulamin