Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons



All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

Quick and Clean with Ruby on Rails

From sava, 11 months ago

Разработване, тестване, интернацион more

915 views  |  0 comments  |  1 favorite  |  12 downloads  |  1 embed (Stats)
 

Groups/Events

Not added to any group/event

 
 

Privacy InfoNew!

This slideshow is Public

 
CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License
Embed in your blog
Embed (wordpress.com)
custom

Slideshow Statistics
Total Views: 915
on Slideshare: 914
from embeds: 1* * Views from embeds since 21 Aug, 07

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: ÿ р à ! ä î î ò ãà à ç èå ë í Á à ì è í â