Бързо и чисто
    Бръзо
с Рубин на Релси


          Сава Чанков
          sava.chankov@gmail.com
Какво е Rails
• Фреймуърк за бърза разработка на уеб
    приложения, които съхраняват данните
    си в SQL СУБД
•   Извлеч...
Какво Rails не е
• Система за управление на съдържание
• Платформа за интегриране на готови
    компоненти
•   Панацея за ...
Архитектура
• Модел - Изглед - Контролер
• Контрол на версиите на схемата на
    базата данни (миграции)
•   Автоматизация...
Съставки
• Съвкупност от независими библиотеки
• ActiveRecord
 •   Модел
 •   Обектно-релационна съпоставка
• ActionPack
 ...
Модели
  ActiveRecord съпоставя клас на всяка таблица
                          Таблица locomotives


 Column   | Type    ...
Модели
• ActiveRecord
 •   автоматично създава свойства на класа,
     които отговарят на колоните в таблицата или
     из...
Модели
• Конвенция над конфигурацията:
 •   имената на таблиците са в множествено
     число (locomotives)
 •   имената на...
Модели
• Конвенцията е над конфигурацията, не
    вместо
•   Тя е просто удобство
•   Когато е необходимо, може да не я
  ...
Модели
• Асоциациите се описват чрез домейн
  език
 •   class Train < AciveRecord::Base
       belongs_to :locomotive
    ...
Модели
• Валидиране на данните
 •   задължително преди запис. При неуспех
     грешките се записват в обекта.
• Callback ф...
Модели
• Търсене с ModelClass.find()
 •   по първичен ключ (id)
 •   по зададени условия, съединения, подредба
 •   с пълна...
Модели
• Транзакции
 • все още не могат да се влагат автоматично
• Възможност за оптимистично
  заключване при конкурентна...
Модели
• Поддържани бази данни:
 •   PostgreSQL, MySQL, Oracle, SQLite, DB2,
     Firebird, Microsoft SQL Server, Sybase, ...
Изгледи
• Шаблони
 • •.rhtml
       embedded Ruby (ERb)
   •   кодът се грижи само за формлението, работната логика е в
  ...
Изгледи
  • Шаблони
    • • .rjs
           генериране на JavaScript от библиотека на Ruby
       •   Улесняват изграждане...
Изгледи
• Помощни методи
 • подобряват читаемостта
 • •много на брой вградени
     link_to, options_for_select

 • може да...
Контролери
• Осъществяват връзката между
    изгледите и моделите
•   Методите им са действия
    •   всяко действие прибл...
Контролери
• Параметрите са в хеш
 •   params[:user]
• Възможност за еднократни нотификации
 •   flash['Благодарим Ви, че с...
Пощальонът Печкин
• ActionMailer
 •   изпращане на поща от приложението
 •   обикновен текст или HTML
 •   може да прикачв...
На Вашите услуги
• ActionWebService
 •   Разбира XML-RPC и SOAP/RPC
 •   Автоматично генерира WSDL
Тестване
• Автоматично генериране на скелет на
    тест при създаване на модел или
    контролер
•   Тестовите данни за ба...
Тестване
• Три вида тестове в кутията:
    •   на модел (unit тест в термините на Rails)
    •   на контролер и свързаните...
Тестване
• А как да тестваме JavaScript?
• Unit тестване с приставката
  javascript_test
 •   тества само JavaScript код
 ...
Тестване
• А как да тестваме JavaScript-a на сложно
    AJAX приложение с тестови данни?
•   Приемни тестове със Selenium
...
Тестване със Selenium
• selenium-on-rails
 •   http://www.openqa.org/selenium-on-rails/

• selenium_jelly - Selenium RC
 •...
Дебъгване и
     производителност
• Rails автоматично генерира при
  създаване на приложението помощни
  скриптове
 •   де...
Внедряване
• Capistrano
 • не е част от Rails
 • работи отдалечено по ssh
 • •автоматизирате внедряването с рецепта:
     ...
Внедряване
• Като FastCGI приложение
 • Apache, lighttpd
• mod_ruby - уви, не
 •   Ruby няма виртуална машина, а Rails не ...
Мащабиране
• Ако държите сесийната информация в
 базата данни или на споделен дял,
 мащабирането е тривиално
 •   Балансир...
Добър вечер, приятелю млад,
320224320276320261321212321200
  320262320265321207320265321
    добре дошъл във България!
• З...
Добър вечер, приятелю млад,
  добре дошъл във България!
• Rails 1.2 ще поддържа операции върху
  многобайтови низове (leng...
Internationalisierung




• Не се поддържа в ядрото на
    Rails...
•   ...но има няколко приставки


     Интернационализ...
Интернационализация
• Ruby-GetText за кода
 • •използва инфраструктурата на gettext
       .po файловете може да се превеж...
Интернационализация
• Globalize за съдържанието
• ... и още няколко приставки
 •   подробно сравнение на
     http://wiki....
Предимства
• Мощен език
• Силна интеграция на тестването
• Автоматизация на задачите
• Конвенция пред конфигурация
• Лесно...
Недостатъци
• Ruby:
 •   слаба поддръжка на Уникод
 •   бавен е - няма виртуална машина
• В кода се промъква SQL
• Все още...
Възможности
• Ruby:
 • •най-сетне да се сдобие с виртуална машина
      освен разработването на собствена се работи по пус...
Заплахи
• Seaside - фреймуърк натранспорт правят
  Субсидиите на пътния Smalltalk
 • http://seaside.st
  железниците нерен...
Среди за разработка
•   Любимият ви текстов редактор (vim,emacs, kate,
    gedit, jedit ... )
•   FreeRIDE - IDE за Ruby
 ...
Ресурси за Ruby
• Първото издание на Кирката
 •   http://www.ruby-doc.org/docs/ProgrammingRuby/
     (Open Publication Lic...
Ресурси за Rails
•   Започнете оттук - http://docs.rubyonrails.com/docs
•   Официално уики - http://wiki.rubyonrails.org/
...
ÿ
          р
         à        !
        ä       î
      î       ò
    ãà
   à ç èå
 ë          í
Á         à
        ì
 ...
Upcoming SlideShare
Loading in …5
×

Quick and Clean with Ruby on Rails

2,730 views

Published on

Разработване, тестване, интернационализация на уеб приложения с Ruby on Rails. Представена на OpenFest 2006.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,730
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
27
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Quick and Clean with Ruby on Rails

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

×