Quick and Clean with Ruby on Rails

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Quick and Clean with Ruby on Rails - Presentation Transcript

    1. Бързо и чисто Бръзо с Рубин на Релси Сава Чанков sava.chankov@gmail.com
    2. Какво е Rails • Фреймуърк за бърза разработка на уеб приложения, които съхраняват данните си в SQL СУБД • Извлечен е от работещо приложение
    3. Какво Rails не е • Система за управление на съдържание • Платформа за интегриране на готови компоненти • Панацея за уеб разработка
    4. Архитектура • Модел - Изглед - Контролер • Контрол на версиите на схемата на базата данни (миграции) • Автоматизация с Rake: по-добрият make • Разширяване чрез приставки
    5. Съставки • Съвкупност от независими библиотеки • ActiveRecord • Модел • Обектно-релационна съпоставка • ActionPack • Изглед + Контролер • ActionMailer - обработка на е-поща • ActionWebService - уеб услуги • Rails - лепилото за всичко това
    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
    7. Модели • ActiveRecord • автоматично създава свойства на класа, които отговарят на колоните в таблицата или изгледа • капсулира достъпа до базата данни • добавя работна логика
    8. Модели • Конвенция над конфигурацията: • имената на таблиците са в множествено число (locomotives) • имената на класовете - в единствено (Locomotive) • имената на съединителните таблици са подредени азбучно (engineers_locomotives) • първичен ключ e автоматично инкрементираща се колона с име id
    9. Модели • Конвенцията е над конфигурацията, не вместо • Тя е просто удобство • Когато е необходимо, може да не я спазвате и да конфигурирате
    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
    11. Модели • Валидиране на данните • задължително преди запис. При неуспех грешките се записват в обекта. • Callback функции в основните моменти от живота на обекта • преди и след валидиране, създаване, променяне, изтриване
    12. Модели • Търсене с ModelClass.find() • по първичен ключ (id) • по зададени условия, съединения, подредба • с пълна SQL заявка или фрагмент от нея • чрез динамично генерирани от свойствата методи find_by_X_and_Y
    13. Модели • Транзакции • все още не могат да се влагат автоматично • Възможност за оптимистично заключване при конкурентна работа • добавете колона lock_version в таблицата • Наблюдатели (Observers) • поведение на тригери извън базата данни • Йерархии от класове • цялото семейство се представят в една таблица (single table inheritance)
    14. Модели • Поддържани бази данни: • PostgreSQL, MySQL, Oracle, SQLite, DB2, Firebird, Microsoft SQL Server, Sybase, Openbase • Възможно е приложението да работи с повече от една база данни (указва се за всеки клас)
    15. Изгледи • Шаблони • •.rhtml embedded Ruby (ERb) • кодът се грижи само за формлението, работната логика е в контролерите и моделите • •.rxml създаване на XML чрез изпълнение на вложени блокове xml.channel do xml.title (\"Заглавие\") end <channel> <title>Заглавие</title> </channel>
    16. Изгледи • Шаблони • • .rjs генериране на JavaScript от библиотека на Ruby • Улесняват изграждането на AJAX приложения page.insert_html :after, @container_id, :partial => @object page[:current_item].visual_effect :highlight, :startcolor => \"#88ff88\", :endcolor => \"#114411\"
    17. Изгледи • Помощни методи • подобряват читаемостта • •много на брой вградени link_to, options_for_select • може да създавате собствени
    18. Контролери • Осъществяват връзката между изгледите и моделите • Методите им са действия • всяко действие приблизително съответства на уеб страница • Eдно и също действие може да генерира HTML, XML, JavaScript и пр. по желание на клиента
    19. Контролери • Параметрите са в хеш • params[:user] • Възможност за еднократни нотификации • flash['Благодарим Ви, че се регистрирахте'] • Конфигуриране на УРЛите чрез пътища • map.connect '', :controller => \"home\"
    20. Пощальонът Печкин • ActionMailer • изпращане на поща от приложението • обикновен текст или HTML • може да прикачва файлове • използва шаблони за генерирането на писмата • по време на тестване може да изпраща писмата до масив в паметта
    21. На Вашите услуги • ActionWebService • Разбира XML-RPC и SOAP/RPC • Автоматично генерира WSDL
    22. Тестване • Автоматично генериране на скелет на тест при създаване на модел или контролер • Тестовите данни за базата данни се съхраняват в YAML формат • scoda:1 id: name: 14-47 max_speed: 124.59 • всеки тест може да укаже данните на кои таблици иска да зареди fixtures :stations, :engineers
    23. Тестване • Три вида тестове в кутията: • на модел (unit тест в термините на Rails) • на контролер и свързаните с него изгледи (функционален тест в термините на Rails) • интеграционен - тестване на потребителски сценарий • Тестовете се изпълняват от командния ред • Rails автоматично стартира уеб сървър и парсва отговорите му при функционални и интеграционни тестове
    24. Тестване • А как да тестваме JavaScript? • Unit тестване с приставката javascript_test • тества само JavaScript код • автоматично стартира наличните браузъри • поддържа Firefox, InternetExplorer, Konqueror и Safari • може добавите и други браузъри • http://dev.rubyonrails.org/svn/rails/plugins/ javascript_test
    25. Тестване • А как да тестваме JavaScript-a на сложно AJAX приложение с тестови данни? • Приемни тестове със Selenium • поддържа основните браузъри върху BSD/ Linux/Windows/Mac OS X • тества директно в браузъра • генериране на тестове чрез записване на действия с приставката за Firefox Selenium IDE • интегриран с Rails чрез приставки • http://openqa.org/selenium/
    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 • излиза от употреба
    27. Дебъгване и производителност • Rails автоматично генерира при създаване на приложението помощни скриптове • дебъгване по време на изпълнение от уеб сървъра и при тестване - breakpointer • Профилиране и измерване на производителността profiler и benchmarker
    28. Внедряване • Capistrano • не е част от Rails • работи отдалечено по ssh • •автоматизирате внедряването с рецепта: изтегляне от хранилището (Subversion,CVS,darcs,git,...) • мигриране на базата данни • презареждане на уеб сървъра • обаждане по телефона на системния администратор ако няма връзка • http://manuals.rubyonrails.com/read/book/17
    29. Внедряване • Като FastCGI приложение • Apache, lighttpd • mod_ruby - уви, не • Ruby няма виртуална машина, а Rails не е thread-safe - върху mod_ruby може да се изпълнява само едно приложение • По-добрият вариант - балансиращ посредник + клъстер mongrel-и • Mongrel е приложен сървър за Ruby • http://mongrel.rubyforge.org/
    30. Мащабиране • Ако държите сесийната информация в базата данни или на споделен дял, мащабирането е тривиално • Балансиране на натоварването между всички звена - уеб сървърите, приложните сървъри и базата данни • http://www.loudthinking.com/arc/000479.html • Кеширането е отлично поддържано
    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 в регулярни изрази и сравнения • Операциите върху низове няма да работят правилно
    32. Добър вечер, приятелю млад, добре дошъл във България! • Rails 1.2 ще поддържа операции върху многобайтови низове (length, capitalize, truncate и пр.) • \"уникод\".chars.length • => 6 • \"уникод\".length • => 12 • \"уникод\".chars.capitalize.to_s • => \"Уникод\"
    33. Internationalisierung • Не се поддържа в ядрото на Rails... • ...но има няколко приставки Интернационализация
    34. Интернационализация • Ruby-GetText за кода • •използва инфраструктурата на gettext .po файловете може да се превеждат от не-програмисти • rake задачи за извличане и обновяване на низовете, компилиране на .po в .mo • превод на метаданните (таблици и колони) • •работи дори когато няма превод показват се низовете от езика по подразбиране • •лесна употреба по време на разработка _(\"Остават ви #{minutes} минути до срещата\")
    35. Интернационализация • Globalize за съдържанието • ... и още няколко приставки • подробно сравнение на http://wiki.rubyonrails.com/rails/pages/ InternationalizationComparison
    36. Предимства • Мощен език • Силна интеграция на тестването • Автоматизация на задачите • Конвенция пред конфигурация • Лесно разширяване и промяна • Мащабируемост • Голяма общност
    37. Недостатъци • Ruby: • слаба поддръжка на Уникод • бавен е - няма виртуална машина • В кода се промъква SQL • Все още не е зряла платформа • няма гаранция, че собствените ви разширения ще работят без промяна с бъдещи версии на Rails
    38. Възможности • Ruby: • •най-сетне да се сдобие с виртуална машина освен разработването на собствена се работи по пускането му върху JVM и .NET • поддръжка на Уникод • Rails: • API за разширяване • Работа с не-SQL хранилища на данни
    39. Заплахи • Seaside - фреймуърк натранспорт правят Субсидиите на пътния Smalltalk • http://seaside.st железниците нерентабилни • Django, TurboGears - Python • http://djangoproject.com/ • http://turbogears.org/ • PHP заплашва да изяде Rails на закуска
    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
    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)
    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/
    43. ÿ р à ! ä î î ò ãà à ç èå ë í Á à ì è í â

    + savasava, 3 years ago

    custom

    2026 views, 1 favs, 1 embeds more stats

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

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 2026
      • 2025 on SlideShare
      • 1 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 20
    Most viewed embeds
    • 1 views on http://s3.amazonaws.com

    more

    All embeds
    • 1 views on http://s3.amazonaws.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories