Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Quick and Clean with Ruby on Rails
Разработване, тестване, интернационализация на уеб приложения с Ruby on Rails. Представена на OpenFest 2006.
1136 views | comments | 1 favorites | 16 downloads | 1 embeds (Stats)
More Info
This slideshow is Public
Total Views: 1136 on Slideshare: 1135 from embeds: 1
Most viewed embeds (Top 5):
More
Slideshow Transcript
- Slide 1: Бързо и чисто
Бръзо
с Рубин на Релси
Сава Чанков
sava.chankov@gmail.com
- Slide 2: Какво е Rails
• Фреймуърк за бърза разработка на уеб
приложения, които съхраняват данните
си в SQL СУБД
• Извлечен е от работещо приложение
- Slide 3: Какво Rails не е
• Система за управление на съдържание
• Платформа за интегриране на готови
компоненти
• Панацея за уеб разработка
- Slide 4: Архитектура
• Модел - Изглед - Контролер
• Контрол на версиите на схемата на
базата данни (миграции)
• Автоматизация с Rake: по-добрият make
• Разширяване чрез приставки
- Slide 5: Съставки
• Съвкупност от независими библиотеки
• ActiveRecord
• Модел
• Обектно-релационна съпоставка
• ActionPack
• Изглед + Контролер
• ActionMailer - обработка на е-поща
• ActionWebService - уеб услуги
• Rails - лепилото за всичко това
- Slide 6: Модели
ActiveRecord съпоставя клас на всяка таблица
Таблица locomotives
Column | Type | Modifiers
----------+---------+-----------------------------------------------
id | integer | not null default nextval('locomotives_id_seq')
name | text | not null
max_speed | numeric | not null
↓
class Locomotive < ActiveRecord::Base
end
- Slide 7: Модели
• ActiveRecord
• автоматично създава свойства на класа,
които отговарят на колоните в таблицата или
изгледа
• капсулира достъпа до базата данни
• добавя работна логика
- Slide 8: Модели
• Конвенция над конфигурацията:
• имената на таблиците са в множествено
число (locomotives)
• имената на класовете - в единствено
(Locomotive)
• имената на съединителните таблици са
подредени азбучно (engineers_locomotives)
• първичен ключ e автоматично
инкрементираща се колона с име id
- Slide 9: Модели
• Конвенцията е над конфигурацията, не
вместо
• Тя е просто удобство
• Когато е необходимо, може да не я
спазвате и да конфигурирате
- Slide 10: Модели
• Асоциациите се описват чрез домейн
език
• class Train < AciveRecord::Base
belongs_to :locomotive
has_many :wagons
has_and_belongs_to_many :stations
end
• class Locomotive < ActiveRecord::Base
has_one :train
has_and_belongs_to_many :engineers
end
- Slide 11: Модели
• Валидиране на данните
• задължително преди запис. При неуспех
грешките се записват в обекта.
• Callback функции в основните моменти от
живота на обекта
• преди и след валидиране, създаване,
променяне, изтриване
- Slide 12: Модели
• Търсене с ModelClass.find()
• по първичен ключ (id)
• по зададени условия, съединения, подредба
• с пълна SQL заявка или фрагмент от нея
• чрез динамично генерирани от свойствата
методи find_by_X_and_Y
- Slide 13: Модели
• Транзакции
• все още не могат да се влагат автоматично
• Възможност за оптимистично
заключване при конкурентна работа
• добавете колона lock_version в таблицата
• Наблюдатели (Observers)
• поведение на тригери извън базата данни
• Йерархии от класове
• цялото семейство се представят в една
таблица (single table inheritance)
- Slide 14: Модели
• Поддържани бази данни:
• PostgreSQL, MySQL, Oracle, SQLite, DB2,
Firebird, Microsoft SQL Server, Sybase, Openbase
• Възможно е приложението да работи с
повече от една база данни (указва се за
всеки клас)
- Slide 15: Изгледи
• Шаблони
• •.rhtml
embedded Ruby (ERb)
• кодът се грижи само за формлението, работната логика е в
контролерите и моделите
• •.rxml
създаване на XML чрез изпълнение на вложени блокове
xml.channel do
xml.title (\"Заглавие\")
end
<channel>
<title>Заглавие</title>
</channel>
- Slide 16: Изгледи
• Шаблони
• • .rjs
генериране на JavaScript от библиотека на Ruby
• Улесняват изграждането на AJAX приложения
page.insert_html :after, @container_id, :partial => @object
page[:current_item].visual_effect :highlight,
:startcolor => \"#88ff88\",
:endcolor => \"#114411\"
- Slide 17: Изгледи
• Помощни методи
• подобряват читаемостта
• •много на брой вградени
link_to, options_for_select
• може да създавате собствени
- Slide 18: Контролери
• Осъществяват връзката между
изгледите и моделите
• Методите им са действия
• всяко действие приблизително съответства на
уеб страница
• Eдно и също действие може да генерира
HTML, XML, JavaScript и пр. по желание
на клиента
- Slide 19: Контролери
• Параметрите са в хеш
• params[:user]
• Възможност за еднократни нотификации
• flash['Благодарим Ви, че се регистрирахте']
• Конфигуриране на УРЛите чрез пътища
• map.connect '', :controller => \"home\"
- Slide 20: Пощальонът Печкин
• ActionMailer
• изпращане на поща от приложението
• обикновен текст или HTML
• може да прикачва файлове
• използва шаблони за генерирането на
писмата
• по време на тестване може да изпраща
писмата до масив в паметта
- Slide 21: На Вашите услуги
• ActionWebService
• Разбира XML-RPC и SOAP/RPC
• Автоматично генерира WSDL
- Slide 22: Тестване
• Автоматично генериране на скелет на
тест при създаване на модел или
контролер
• Тестовите данни за базата данни се
съхраняват в YAML формат
• scoda:1
id:
name: 14-47
max_speed: 124.59
• всеки тест може да укаже данните на кои
таблици иска да зареди
fixtures :stations, :engineers
- Slide 23: Тестване
• Три вида тестове в кутията:
• на модел (unit тест в термините на Rails)
• на контролер и свързаните с него изгледи
(функционален тест в термините на Rails)
• интеграционен - тестване на потребителски
сценарий
• Тестовете се изпълняват от командния
ред
• Rails автоматично стартира уеб сървър и
парсва отговорите му при функционални
и интеграционни тестове
- Slide 24: Тестване
• А как да тестваме JavaScript?
• Unit тестване с приставката
javascript_test
• тества само JavaScript код
• автоматично стартира наличните браузъри
• поддържа Firefox, InternetExplorer, Konqueror и
Safari
• може добавите и други браузъри
• http://dev.rubyonrails.org/svn/rails/plugins/
javascript_test
- Slide 25: Тестване
• А как да тестваме JavaScript-a на сложно
AJAX приложение с тестови данни?
• Приемни тестове със Selenium
• поддържа основните браузъри върху BSD/
Linux/Windows/Mac OS X
• тества директно в браузъра
• генериране на тестове чрез записване на
действия с приставката за Firefox Selenium IDE
• интегриран с Rails чрез приставки
• http://openqa.org/selenium/
- Slide 26: Тестване със Selenium
• selenium-on-rails
• http://www.openqa.org/selenium-on-rails/
• selenium_jelly - Selenium RC
• браузърът и тестовият сървър може да са на
отделни машини
• http://svn.viney.net.nz/things/rails/plugins/
selenium_jelly/
• selenium_testing
• излиза от употреба
- Slide 27: Дебъгване и
производителност
• Rails автоматично генерира при
създаване на приложението помощни
скриптове
• дебъгване по време на изпълнение от уеб
сървъра и при тестване - breakpointer
• Профилиране и измерване на
производителността profiler и benchmarker
- Slide 28: Внедряване
• Capistrano
• не е част от Rails
• работи отдалечено по ssh
• •автоматизирате внедряването с рецепта:
изтегляне от хранилището (Subversion,CVS,darcs,git,...)
• мигриране на базата данни
• презареждане на уеб сървъра
• обаждане по телефона на системния администратор ако няма
връзка
• http://manuals.rubyonrails.com/read/book/17
- Slide 29: Внедряване
• Като FastCGI приложение
• Apache, lighttpd
• mod_ruby - уви, не
• Ruby няма виртуална машина, а Rails не е
thread-safe - върху mod_ruby може да се
изпълнява само едно приложение
• По-добрият вариант - балансиращ
посредник + клъстер mongrel-и
• Mongrel е приложен сървър за Ruby
• http://mongrel.rubyforge.org/
- Slide 30: Мащабиране
• Ако държите сесийната информация в
базата данни или на споделен дял,
мащабирането е тривиално
• Балансиране на натоварването между всички
звена - уеб сървърите, приложните сървъри и
базата данни
• http://www.loudthinking.com/arc/000479.html
• Кеширането е отлично поддържано
- Slide 31: Добър вечер, приятелю млад,
\\320\\224\\320\\276\\320\\261\\321\\212\\321\\200
\\320\\262\\320\\265\\321\\207\\320\\265\\321
добре дошъл във България!
• За Ruby все още низовете са прости
последователности от байтове
• Затова винаги указвайте кодиране в
отговора на приложението
• $KCODE=’UTF8’
• Ограничена поддръжка на UTF-8 в регулярни
изрази и сравнения
• Операциите върху низове няма да работят
правилно
- Slide 32: Добър вечер, приятелю млад,
добре дошъл във България!
• Rails 1.2 ще поддържа операции върху
многобайтови низове (length, capitalize,
truncate и пр.)
• \"уникод\".chars.length
• => 6
• \"уникод\".length
• => 12
• \"уникод\".chars.capitalize.to_s
• => \"Уникод\"
- Slide 33: Internationalisierung
• Не се поддържа в ядрото на
Rails...
• ...но има няколко приставки
Интернационализация
- Slide 34: Интернационализация
• Ruby-GetText за кода
• •използва инфраструктурата на gettext
.po файловете може да се превеждат от не-програмисти
• rake задачи за извличане и обновяване на низовете,
компилиране на .po в .mo
• превод на метаданните (таблици и колони)
• •работи дори когато няма превод
показват се низовете от езика по подразбиране
• •лесна употреба по време на разработка
_(\"Остават ви #{minutes} минути до срещата\")
- Slide 35: Интернационализация
• Globalize за съдържанието
• ... и още няколко приставки
• подробно сравнение на
http://wiki.rubyonrails.com/rails/pages/
InternationalizationComparison
- Slide 36: Предимства
• Мощен език
• Силна интеграция на тестването
• Автоматизация на задачите
• Конвенция пред конфигурация
• Лесно разширяване и промяна
• Мащабируемост
• Голяма общност
- Slide 37: Недостатъци
• Ruby:
• слаба поддръжка на Уникод
• бавен е - няма виртуална машина
• В кода се промъква SQL
• Все още не е зряла платформа
• няма гаранция, че собствените ви разширения
ще работят без промяна с бъдещи версии на
Rails
- Slide 38: Възможности
• Ruby:
• •най-сетне да се сдобие с виртуална машина
освен разработването на собствена се работи по пускането му
върху JVM и .NET
• поддръжка на Уникод
• Rails:
• API за разширяване
• Работа с не-SQL хранилища на данни
- Slide 39: Заплахи
• Seaside - фреймуърк натранспорт правят
Субсидиите на пътния Smalltalk
• http://seaside.st
железниците нерентабилни
• Django, TurboGears - Python
• http://djangoproject.com/
• http://turbogears.org/
• PHP заплашва да изяде Rails на закуска
- Slide 40: Среди за разработка
• Любимият ви текстов редактор (vim,emacs, kate,
gedit, jedit ... )
• FreeRIDE - IDE за Ruby
• http://freeride.rubyforge.org/
• RadRails - плъгин за Eclipse
• http://www.radrails.org/
• RDT - плъгин за Eclipse
• http://rubyeclipse.sourceforge.net/
• Само под Windows:
• RoRED
• RIDE-ME (Rails IDE - Minus Eclipse)
• Saphire Steel for Microsoft Visual Studio 2005
- Slide 41: Ресурси за Ruby
• Първото издание на Кирката
• http://www.ruby-doc.org/docs/ProgrammingRuby/
(Open Publication License, v1.0)
• why's poignant guide to ruby
• http://poignantguide.net/ruby/
(Криейтив Комънс Признание-Споделяне на
споделеното 2.0)
- Slide 42: Ресурси за Rails
• Започнете оттук - http://docs.rubyonrails.com/docs
• Официално уики - http://wiki.rubyonrails.org/
• Учебници и въведения - остаряват ужасно бързо
• http://www.digitalmediaminute.com/article/1816/
top-ruby-on-rails-tutorials
• Pragmatic programmers (Кирката, Скейта и
Рецептите)
• http://www.pragmaticprogrammer.com/
• Официален блог - http://weblog.rubyonrails.com/
• На български - http://www.bgonrails.com/
- Slide 43: ÿ
р
à !
ä î
î ò
ãà
à ç èå
ë í
Á à
ì
è
í
â