SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Бързо и чисто
    Бръзо
с Рубин на Релси


          Сава Чанков
          sava.chankov@gmail.com
Какво е Rails
• Фреймуърк за бърза разработка на уеб
    приложения, които съхраняват данните
    си в SQL СУБД
•   Извлечен е от работещо приложение
Какво Rails не е
• Система за управление на съдържание
• Платформа за интегриране на готови
    компоненти
•   Панацея за уеб разработка
Архитектура
• Модел - Изглед - Контролер
• Контрол на версиите на схемата на
    базата данни (миграции)
•   Автоматизация с Rake: по-добрият make
•   Разширяване чрез приставки
Съставки
• Съвкупност от независими библиотеки
• ActiveRecord
 •   Модел
 •   Обектно-релационна съпоставка
• ActionPack
 • Изглед + Контролер
• ActionMailer - обработка на е-поща
• ActionWebService - уеб услуги
• Rails - лепилото за всичко това
Модели
  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
Модели
• ActiveRecord
 •   автоматично създава свойства на класа,
     които отговарят на колоните в таблицата или
     изгледа
 •   капсулира достъпа до базата данни
 •   добавя работна логика
Модели
• Конвенция над конфигурацията:
 •   имената на таблиците са в множествено
     число (locomotives)
 •   имената на класовете - в единствено
     (Locomotive)
 •   имената на съединителните таблици са
     подредени азбучно (engineers_locomotives)
 •   първичен ключ e автоматично
     инкрементираща се колона с име id
Модели
• Конвенцията е над конфигурацията, не
    вместо
•   Тя е просто удобство
•   Когато е необходимо, може да не я
    спазвате и да конфигурирате
Модели
• Асоциациите се описват чрез домейн
  език
 •   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
Модели
• Валидиране на данните
 •   задължително преди запис. При неуспех
     грешките се записват в обекта.
• Callback функции в основните моменти от
  живота на обекта
 •   преди и след валидиране, създаване,
     променяне, изтриване
Модели
• Търсене с ModelClass.find()
 •   по първичен ключ (id)
 •   по зададени условия, съединения, подредба
 •   с пълна SQL заявка или фрагмент от нея
 •   чрез динамично генерирани от свойствата
     методи find_by_X_and_Y
Модели
• Транзакции
 • все още не могат да се влагат автоматично
• Възможност за оптимистично
  заключване при конкурентна работа
 •   добавете колона lock_version в таблицата
• Наблюдатели (Observers)
 • поведение на тригери извън базата данни
• Йерархии от класове
 •   цялото семейство се представят в една
     таблица (single table inheritance)
Модели
• Поддържани бази данни:
 •   PostgreSQL, MySQL, Oracle, SQLite, DB2,
     Firebird, Microsoft SQL Server, Sybase, Openbase
• Възможно е приложението да работи с
 повече от една база данни (указва се за
 всеки клас)
Изгледи
• Шаблони
 • •.rhtml
       embedded Ruby (ERb)
   •   кодът се грижи само за формлението, работната логика е в
       контролерите и моделите

 • •.rxml
       създаване на XML чрез изпълнение на вложени блокове
       xml.channel do
        xml.title (quot;Заглавиеquot;)
       end

       <channel>
         <title>Заглавие</title>
         </channel>
Изгледи
  • Шаблони
    • • .rjs
           генериране на JavaScript от библиотека на Ruby
       •   Улесняват изграждането на AJAX приложения

page.insert_html :after, @container_id, :partial => @object

page[:current_item].visual_effect :highlight,
                                  :startcolor => quot;#88ff88quot;,
                                  :endcolor => quot;#114411quot;
Изгледи
• Помощни методи
 • подобряват читаемостта
 • •много на брой вградени
     link_to, options_for_select

 • може да създавате собствени
Контролери
• Осъществяват връзката между
    изгледите и моделите
•   Методите им са действия
    •   всяко действие приблизително съответства на
        уеб страница
• Eдно и също действие може да генерира
    HTML, XML, JavaScript и пр. по желание
    на клиента
Контролери
• Параметрите са в хеш
 •   params[:user]
• Възможност за еднократни нотификации
 •   flash['Благодарим Ви, че се регистрирахте']
• Конфигуриране на УРЛите чрез пътища
 •   map.connect '', :controller => quot;homequot;
Пощальонът Печкин
• ActionMailer
 •   изпращане на поща от приложението
 •   обикновен текст или HTML
 •   може да прикачва файлове
 •   използва шаблони за генерирането на
     писмата
 •   по време на тестване може да изпраща
     писмата до масив в паметта
На Вашите услуги
• ActionWebService
 •   Разбира XML-RPC и SOAP/RPC
 •   Автоматично генерира WSDL
Тестване
• Автоматично генериране на скелет на
    тест при създаване на модел или
    контролер
•   Тестовите данни за базата данни се
    съхраняват в YAML формат
    • scoda:1
        id:
          name: 14-47
          max_speed: 124.59
    •   всеки тест може да укаже данните на кои
        таблици иска да зареди
        fixtures :stations, :engineers
Тестване
• Три вида тестове в кутията:
    •   на модел (unit тест в термините на Rails)
    •   на контролер и свързаните с него изгледи
        (функционален тест в термините на Rails)
    •   интеграционен - тестване на потребителски
        сценарий
• Тестовете се изпълняват от командния
    ред
•   Rails автоматично стартира уеб сървър и
    парсва отговорите му при функционални
    и интеграционни тестове
Тестване
• А как да тестваме JavaScript?
• Unit тестване с приставката
  javascript_test
 •   тества само JavaScript код
 •   автоматично стартира наличните браузъри
 •   поддържа Firefox, InternetExplorer, Konqueror и
     Safari
 •   може добавите и други браузъри
 •   http://dev.rubyonrails.org/svn/rails/plugins/
     javascript_test
Тестване
• А как да тестваме JavaScript-a на сложно
    AJAX приложение с тестови данни?
•   Приемни тестове със Selenium
    •   поддържа основните браузъри върху BSD/
        Linux/Windows/Mac OS X
    •   тества директно в браузъра
    •   генериране на тестове чрез записване на
        действия с приставката за Firefox Selenium IDE
    •   интегриран с Rails чрез приставки
    •   http://openqa.org/selenium/
Тестване със 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
 •   излиза от употреба
Дебъгване и
     производителност
• Rails автоматично генерира при
  създаване на приложението помощни
  скриптове
 •   дебъгване по време на изпълнение от уеб
     сървъра и при тестване - breakpointer
 •   Профилиране и измерване на
     производителността profiler и benchmarker
Внедряване
• Capistrano
 • не е част от Rails
 • работи отдалечено по ssh
 • •автоматизирате внедряването с рецепта:
         изтегляне от хранилището (Subversion,CVS,darcs,git,...)
     •   мигриране на базата данни
     •   презареждане на уеб сървъра
     •   обаждане по телефона на системния администратор ако няма
         връзка

 •   http://manuals.rubyonrails.com/read/book/17
Внедряване
• Като FastCGI приложение
 • Apache, lighttpd
• mod_ruby - уви, не
 •   Ruby няма виртуална машина, а Rails не е
     thread-safe - върху mod_ruby може да се
     изпълнява само едно приложение
• По-добрият вариант - балансиращ
  посредник + клъстер mongrel-и
 •   Mongrel е приложен сървър за Ruby
 •   http://mongrel.rubyforge.org/
Мащабиране
• Ако държите сесийната информация в
 базата данни или на споделен дял,
 мащабирането е тривиално
 •   Балансиране на натоварването между всички
     звена - уеб сървърите, приложните сървъри и
     базата данни
 •   http://www.loudthinking.com/arc/000479.html
• Кеширането е отлично поддържано
Добър вечер, приятелю млад,
320224320276320261321212321200
  320262320265321207320265321
    добре дошъл във България!
• За Ruby все още низовете са прости
    последователности от байтове
•   Затова винаги указвайте кодиране в
    отговора на приложението
•   $KCODE=’UTF8’
    •   Ограничена поддръжка на UTF-8 в регулярни
        изрази и сравнения
    •   Операциите върху низове няма да работят
        правилно
Добър вечер, приятелю млад,
  добре дошъл във България!
• Rails 1.2 ще поддържа операции върху
  многобайтови низове (length, capitalize,
  truncate и пр.)
 •   quot;уникодquot;.chars.length
 •   => 6
 •   quot;уникодquot;.length
 •   => 12
 •   quot;уникодquot;.chars.capitalize.to_s
 •   => quot;Уникодquot;
Internationalisierung




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


     Интернационализация
Интернационализация
• Ruby-GetText за кода
 • •използва инфраструктурата на gettext
       .po файловете може да се превеждат от не-програмисти
   •   rake задачи за извличане и обновяване на низовете,
       компилиране на .po в .mo

 • превод на метаданните (таблици и колони)
 • •работи дори когато няма превод
       показват се низовете от езика по подразбиране

 • •лесна употреба по време на разработка
       _(quot;Остават ви #{minutes} минути до срещатаquot;)
Интернационализация
• Globalize за съдържанието
• ... и още няколко приставки
 •   подробно сравнение на
     http://wiki.rubyonrails.com/rails/pages/
     InternationalizationComparison
Предимства
• Мощен език
• Силна интеграция на тестването
• Автоматизация на задачите
• Конвенция пред конфигурация
• Лесно разширяване и промяна
• Мащабируемост
• Голяма общност
Недостатъци
• Ruby:
 •   слаба поддръжка на Уникод
 •   бавен е - няма виртуална машина
• В кода се промъква SQL
• Все още не е зряла платформа
 •   няма гаранция, че собствените ви разширения
     ще работят без промяна с бъдещи версии на
     Rails
Възможности
• Ruby:
 • •най-сетне да се сдобие с виртуална машина
      освен разработването на собствена се работи по пускането му
      върху JVM и .NET

 •   поддръжка на Уникод
• Rails:
 •   API за разширяване
 •   Работа с не-SQL хранилища на данни
Заплахи
• Seaside - фреймуърк натранспорт правят
  Субсидиите на пътния Smalltalk
 • http://seaside.st
  железниците нерентабилни
• Django, TurboGears - Python
 • http://djangoproject.com/
 • http://turbogears.org/
• PHP заплашва да изяде Rails на закуска
Среди за разработка
•   Любимият ви текстов редактор (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
Ресурси за 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)
Ресурси за 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/
ÿ
          р
         à        !
        ä       î
      î       ò
    ãà
   à ç èå
 ë          í
Á         à
        ì
      è
    í
  â

Mais conteúdo relacionado

Mais procurados

Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0runastik
 
интернет контроль сервер V4
интернет контроль сервер V4интернет контроль сервер V4
интернет контроль сервер V4arealconsulting
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_newguest18d24c
 
будневич Rc Resolver
будневич Rc Resolverбудневич Rc Resolver
будневич Rc ResolverLiudmila Li
 
Career Development в Epam Systems
Career Development в Epam SystemsCareer Development в Epam Systems
Career Development в Epam Systemssef2009
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project developmentOntico
 
гайсина ах
гайсина ахгайсина ах
гайсина ахsashatasha98
 
Devby Sef Presentation
Devby Sef PresentationDevby Sef Presentation
Devby Sef Presentationsef2009
 
вопросы
вопросывопросы
вопросыsef2009
 
How to make your site accessible
How to make your site accessibleHow to make your site accessible
How to make your site accessibleYuriy Artyukh
 
Open-source для диплома
Open-source для дипломаOpen-source для диплома
Open-source для дипломаStas Fomin
 
Sef Ikhelis
Sef IkhelisSef Ikhelis
Sef Ikhelissef2009
 
кодирование текстовой информации
кодирование текстовой информациикодирование текстовой информации
кодирование текстовой информацииarokle522
 
владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009Liudmila Li
 
Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Docsvision
 
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиОптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиcollaborator.pro
 

Mais procurados (20)

Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0
 
интернет контроль сервер V4
интернет контроль сервер V4интернет контроль сервер V4
интернет контроль сервер V4
 
Xrumme
XrummeXrumme
Xrumme
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_new
 
будневич Rc Resolver
будневич Rc Resolverбудневич Rc Resolver
будневич Rc Resolver
 
Career Development в Epam Systems
Career Development в Epam SystemsCareer Development в Epam Systems
Career Development в Epam Systems
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Problogging
ProbloggingProblogging
Problogging
 
гайсина ах
гайсина ахгайсина ах
гайсина ах
 
Devby Sef Presentation
Devby Sef PresentationDevby Sef Presentation
Devby Sef Presentation
 
вопросы
вопросывопросы
вопросы
 
Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)
 
How to make your site accessible
How to make your site accessibleHow to make your site accessible
How to make your site accessible
 
Open-source для диплома
Open-source для дипломаOpen-source для диплома
Open-source для диплома
 
Sef Ikhelis
Sef IkhelisSef Ikhelis
Sef Ikhelis
 
кодирование текстовой информации
кодирование текстовой информациикодирование текстовой информации
кодирование текстовой информации
 
10 Xs Dg
10 Xs Dg10 Xs Dg
10 Xs Dg
 
владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009
 
Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2Новое в легком клиенте 5.1.2
Новое в легком клиенте 5.1.2
 
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиОптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
 

Destaque

Geht Nicht Gibts Nicht
Geht Nicht Gibts NichtGeht Nicht Gibts Nicht
Geht Nicht Gibts Nichttippyhamburg
 
你最重要的東西是什麼?
你最重要的東西是什麼?你最重要的東西是什麼?
你最重要的東西是什麼?briian
 
MartiñA En Congreso Febrero 2006[1]
MartiñA En Congreso Febrero 2006[1]MartiñA En Congreso Febrero 2006[1]
MartiñA En Congreso Febrero 2006[1]apeljor
 
Radioswap
RadioswapRadioswap
Radioswapnetlach
 
PrescripcióN
PrescripcióNPrescripcióN
PrescripcióNreskate
 
Assessment
AssessmentAssessment
Assessmente3tmisd
 
Que Existe Y Que No
Que Existe Y Que NoQue Existe Y Que No
Que Existe Y Que NoRoxanna
 
Generación robótica / Proyecto Ana
Generación robótica / Proyecto AnaGeneración robótica / Proyecto Ana
Generación robótica / Proyecto Ananetlach
 
Radioswap
RadioswapRadioswap
Radioswapnetlach
 
Aspectos De La QuíMica BáSica
Aspectos De La QuíMica BáSicaAspectos De La QuíMica BáSica
Aspectos De La QuíMica BáSicamunizchesca
 
Kerberos and WebVoyage
Kerberos and WebVoyageKerberos and WebVoyage
Kerberos and WebVoyageRick Silterra
 
Enlace quÍmico
Enlace quÍmicoEnlace quÍmico
Enlace quÍmicoAthenea I
 
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.netlach
 
Lightart Apšvietimo Realizacijos
Lightart Apšvietimo RealizacijosLightart Apšvietimo Realizacijos
Lightart Apšvietimo Realizacijospavbal
 

Destaque (20)

Verdadeiramente linda
Verdadeiramente lindaVerdadeiramente linda
Verdadeiramente linda
 
Geht Nicht Gibts Nicht
Geht Nicht Gibts NichtGeht Nicht Gibts Nicht
Geht Nicht Gibts Nicht
 
1 Mana Dzive
1 Mana Dzive1 Mana Dzive
1 Mana Dzive
 
你最重要的東西是什麼?
你最重要的東西是什麼?你最重要的東西是什麼?
你最重要的東西是什麼?
 
MartiñA En Congreso Febrero 2006[1]
MartiñA En Congreso Febrero 2006[1]MartiñA En Congreso Febrero 2006[1]
MartiñA En Congreso Febrero 2006[1]
 
Acam
AcamAcam
Acam
 
Radioswap
RadioswapRadioswap
Radioswap
 
PrescripcióN
PrescripcióNPrescripcióN
PrescripcióN
 
Assessment
AssessmentAssessment
Assessment
 
Que Existe Y Que No
Que Existe Y Que NoQue Existe Y Que No
Que Existe Y Que No
 
Generación robótica / Proyecto Ana
Generación robótica / Proyecto AnaGeneración robótica / Proyecto Ana
Generación robótica / Proyecto Ana
 
Cuerda 2251
Cuerda 2251Cuerda 2251
Cuerda 2251
 
Radioswap
RadioswapRadioswap
Radioswap
 
Accesorii Vaca
Accesorii VacaAccesorii Vaca
Accesorii Vaca
 
Aspectos De La QuíMica BáSica
Aspectos De La QuíMica BáSicaAspectos De La QuíMica BáSica
Aspectos De La QuíMica BáSica
 
Kerberos and WebVoyage
Kerberos and WebVoyageKerberos and WebVoyage
Kerberos and WebVoyage
 
Enlace quÍmico
Enlace quÍmicoEnlace quÍmico
Enlace quÍmico
 
Aguascalientes
AguascalientesAguascalientes
Aguascalientes
 
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.
Pierre Bongiovanni: Tecnología, mutaciones y gesto artístico.
 
Lightart Apšvietimo Realizacijos
Lightart Apšvietimo RealizacijosLightart Apšvietimo Realizacijos
Lightart Apšvietimo Realizacijos
 

Quick and Clean with Ruby on Rails

  • 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 (quot;Заглавиеquot;) 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 => quot;#88ff88quot;, :endcolor => quot;#114411quot;
  • 17. Изгледи • Помощни методи • подобряват читаемостта • •много на брой вградени link_to, options_for_select • може да създавате собствени
  • 18. Контролери • Осъществяват връзката между изгледите и моделите • Методите им са действия • всяко действие приблизително съответства на уеб страница • Eдно и също действие може да генерира HTML, XML, JavaScript и пр. по желание на клиента
  • 19. Контролери • Параметрите са в хеш • params[:user] • Възможност за еднократни нотификации • flash['Благодарим Ви, че се регистрирахте'] • Конфигуриране на УРЛите чрез пътища • map.connect '', :controller => quot;homequot;
  • 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. Добър вечер, приятелю млад, 320224320276320261321212321200 320262320265321207320265321 добре дошъл във България! • За Ruby все още низовете са прости последователности от байтове • Затова винаги указвайте кодиране в отговора на приложението • $KCODE=’UTF8’ • Ограничена поддръжка на UTF-8 в регулярни изрази и сравнения • Операциите върху низове няма да работят правилно
  • 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. Internationalisierung • Не се поддържа в ядрото на Rails... • ...но има няколко приставки Интернационализация
  • 34. Интернационализация • Ruby-GetText за кода • •използва инфраструктурата на gettext .po файловете може да се превеждат от не-програмисти • rake задачи за извличане и обновяване на низовете, компилиране на .po в .mo • превод на метаданните (таблици и колони) • •работи дори когато няма превод показват се низовете от езика по подразбиране • •лесна употреба по време на разработка _(quot;Остават ви #{minutes} минути до срещатаquot;)
  • 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. ÿ р à ! ä î î ò ãà à ç èå ë í Á à ì è í â