Rails Zaawansowane programowanie railzp.pdf

(471 KB) Pobierz
Rails. Zaawansowane programowanie
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!
454079196.002.png 454079196.003.png
Spis treci
Wstp ........................................................................................................................................ 5
1. Techniki podstawowe ................................................................................................... 9
Czym jest metaprogramowanie?
9
Podstawy Ruby
12
Techniki metaprogramowania
30
Programowanie funkcyjne
41
Przykady
46
Propozycje dalszych lektur
49
2. ActiveSupport oraz RailTies ........................................................................................ 51
Ruby, jakiego nie znamy
51
Jak czyta kod?
54
ActiveSupport
61
Core Extensions
65
RailTies
79
Propozycje dalszych lektur
81
3. Wtyczki Rails ................................................................................................................83
Wtyczki
83
Tworzenie wtyczek
87
Przykad wtyczki
89
Testowanie wtyczek
94
Propozycje dalszych lektur
97
4. Bazy danych .................................................................................................................99
Systemy zarzdzania baz danych
99
Due obiekty (binarne)
104
Zaawansowane funkcje baz danych
112
Podczanie do wielu baz danych
118
Buforowanie
120
Wyrównywanie obcienia i wysoka dostpno
121
LDAP
126
Propozycje dalszych lektur
127
3
454079196.004.png
5. Bezpieczestwo ......................................................................................................... 129
Problemy w aplikacji
129
Problemy w sieci WWW
138
Wstrzykiwanie SQL
145
rodowisko Ruby
146
Propozycje dalszych lektur
147
6. Wydajno .................................................................................................................. 149
Narzdzia pomiarowe
150
Przykad optymalizacji Rails
156
Wydajno ActiveRecord
165
Skalowanie architektury
174
Inne systemy
181
Propozycje dalszych lektur
183
7. REST, zasoby oraz usugi Web .................................................................................. 185
Czym jest REST?
185
Zalety architektury REST
203
REST w Rails
207
Analiza przypadku — Amazon S3
226
Propozycje dalszych lektur
230
8. i18n oraz L10n ............................................................................................................ 231
Lokalizacje
231
Kodowanie znaków
232
Unicode
233
Rails i Unicode
235
Rails L10n
243
Propozycje dalszych lektur
262
9. Wykorzystanie i rozszerzanie Rails .......................................................................... 263
Wymiana komponentów Rails
263
Wykorzystanie komponentów Rails
274
Udzia w tworzeniu Rails
279
Propozycje dalszych lektur
285
10. Due projekty ............................................................................................................. 287
Kontrola wersji
287
ledzenie bdów
298
Struktura projektu
299
Instalacja Rails
305
Propozycje dalszych lektur
311
Skorowidz ............................................................................................................................. 313
4
Spis treci
ROZDZIA 1.
Techniki podstawowe
Do osignicia niezawodnoci jest wymagana prostota.
Edsger W. Dijkstra
Od pierwszego wydania w lipcu 2004 roku rodowisko Ruby on Rails stale zdobywa popu-
larno. Rails przyciga programistów PHP, Java i .NET swoj prostot — architektur
model-widok-kontroler (MVC), rozsdnymi wartociami domylnymi („konwencja nad kon-
figuracj”) oraz zaawansowanym jzykiem programowania Ruby.
rodowisko Rails miao przez pierwszy rok lub dwa sab reputacj z uwagi na braki w do-
kumentacji. Luka ta zostaa wypeniona przez tysice programistów, którzy korzystali ze
rodowiska Ruby on Rails, wspótworzyli je i pisali na jego temat, jak równie dziki pro-
jektowi Rails Documentation ( http://railsdocumentation.org ). Dostpne s tysice blogów, które
zawieraj samouczki oraz porady na temat programowania w Rails.
Celem tej ksiki jest zebranie najlepszych praktyk oraz wiedzy zgromadzonej przez rodo-
wisko programistów Rails i zaprezentowanie ich w atwej do przyswojenia, zwartej formie.
Poszukiwaem ponadto tych aspektów programowania dla WWW, które s czsto niedoce-
niane lub pomijane przez rodowisko Rails.
Czym jest metaprogramowanie?
Rails udostpnia metaprogramowanie dla mas. Cho nie byo to pierwsze zastosowanie za-
awansowanych funkcji Ruby, to jednak jest ono chyba najbardziej popularne. Aby zrozumie
dziaanie Rails, konieczne jest wczeniejsze zapoznanie si z tymi mechanizmami Ruby, które
zostay wykorzystane w tym rodowisku. W tym rozdziale przedstawione zostan podsta-
wowe mechanizmy zapewniajce dziaanie technik przedstawianych w pozostaych rozdzia-
ach ksiki.
Metaprogramowanie to technika programowania, w której kod jest wykorzystywany do
tworzenia innego kodu, bd dokonania introspekcji samego siebie. Przedrostek meta (z gre-
ki) wskazuje na abstrakcj; kod wykorzystujcy techniki metaprogramowania dziaa jedno-
czenie na dwóch poziomach abstrakcji.
Metaprogramowanie jest wykorzystywane w wielu jzykach, ale jest najbardziej popularne
w jzykach dynamicznych, poniewa maj one zwykle wicej funkcji pozwalajcych na ma-
nipulowanie kodem jako danymi. Pomimo tego, e w jzykach statycznych, takich jak C# lub
9
454079196.005.png
Java, dostpny jest mechanizm refleksji, to nie jest on nawet w czci tak przezroczysty, jak
w jzykach 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 najniszym poziomem introspekcji — pozwala na bezporedni analiz tekstu
programu lub strumienia tokenów. Metaprogramowanie bazujce na szablonach lub ma-
krach zwykle dziaa na poziomie syntaktycznym.
Ten typ metaprogramowania jest wykorzystany w jzyku Lisp poprzez stosowanie S-wyrae
(bezporedniego tumaczenia drzewa abstrakcji skadni programu) zarówno w przypadku kodu,
jak i danych. Metaprogramowanie w jzyku Lisp wymaga intensywnego korzystania z makr ,
które s tak naprawd szablonami kodu. Daje to moliwo 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 wartociowany. Jednak metaprogramowanie na poziomie syntaktycznym ma swoje
wady. Przechwytywanie zmiennych oraz przypadkowe wielokrotne wartociowanie jest bez-
poredni konsekwencj umieszczenia kodu na dwóch poziomach abstrakcji dla tej samej prze-
strzeni nazw. Cho dostpne s standardowe idiomy jzyka Lisp pozwalajce na uporanie si
z tymi problemami, to jednak s one kolejnymi elementami, których programista Lisp musi
si nauczy i pamita o nich.
Introspekcja syntaktyczna w Ruby jest dostpna za porednictwem biblioteki ParseTree , która
pozwala na tumaczenie kodu ródowego Ruby na S-wyraenia 1 . Interesujcym zastosowa-
niem tej biblioteki jest Heckle 2 , biblioteka uatwiajca testowanie, która analizuje kod ródowy
Ruby i zmienia go poprzez modyfikowanie cigów oraz zmian wartoci true na false
i odwrotnie. W zaoeniach, jeeli nasz kod jest odpowiednio pokryty testami, kada mody-
fikacja kodu powinna zosta wykryta przez testy jednostkowe.
Alternatyw dla introspekcji syntaktycznej jest dziaajca na wyszym poziomie introspekcja
semantyczna , czyli analiza programu z wykorzystaniem struktur danych wyszego pozio-
mu. Sposób realizacji tej techniki róni si w ronych jzykach programowania, ale w Ruby
zwykle oznacza to operowanie na poziomie klas i metod — tworzenie, modyfikowanie i alia-
sowanie metod; przechwytywanie wywoa metod; manipulowanie acuchem dziedzicze-
nia. Techniki te s zwykle bardziej zwizane z istniejcym kodem ni metody syntaktyczne,
poniewa najczciej istniejce 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”, kady element informacji musi by zdefiniowany w systemie tylko raz.
Powielanie jest zwykle niepotrzebne, szczególnie w jzykach dynamicznych, takich jak Ruby.
Podobnie jak abstrakcja funkcjonalna pozwala nam na uniknicie powielania kodu, który jest
taki sam lub niemal taki sam, metaprogramowanie pozwala nam unikn podobnych kon-
cepcji, wykorzystywanych w aplikacji.
1 http://www.zenspider.com/ZSS/Products/ParseTree .
2 http://rubyforge.org/projects/seattlerb .
10
Rozdzia 1. Techniki podstawowe
454079196.001.png
Zgłoś jeśli naruszono regulamin