Ruby on Rails

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
Ruby on Rails
Ruby on Rails logo.jpg
Информация
Разработчик Rails Core Team
Уебсайт rubyonrails.org

Ruby on Rails Ruby on Rails (често съкращавано в английски като Rails или RoR) е популярна софтуерна рамка под MIT лиценз. Rails е рамка от вида: Модел-Изглед-Контролер (MVC), написана изцяло на програмния език Ruby. Тя включва в себе си множество предварително зададени структури за бази данни, уеб услуги и уеб страници. Тя насърчава и улеснява използването на уеб стандарти като JSON или XML за пренос на данни, както и HTML, CSS и JavaScript за визуализация и потребителски интерфейс. В допълнение към MVC, Rails набляга на използването на други добре познати модели и парадигми в софтуерното инженерство, включително конвенция над конфигурация (CoC), не се повтаряй (DRY) и модела active record pattern. Ruby on Rails има за цел да улесни и ускори начина на разработване на уеб-приложенията. [1] Самата софтуерна рамка е с отворен код и се предлага като пакет през RubyGems (gem install rails).

История[редактиране | редактиране на кода]

Работейки върху инструмент за управление на проекти Basecamp, в компания за уеб приложение която също се казва Basecamp, Дейвид Хайнемайер Хансън използва своя проект, за да създаде Ruby on Rails. Той пуска Rails като отворен код през юли 2004, но не предоставя права за доработка(commit rights) до февруари 2005. Важен момент в историята на софтуерната рамка е месец август 2006, когато Apple обявяват, че ще включат Ruby on Rails в Mac OS X v10.5 „Leopard“ [2], който е пуснат на пазара през октомври 2007.

Ruby on Rails версия 2.3 е пусната на 15 март 2009 с много нови промени в шаблоните, engines, Rack и вложените моделни форми. Тези шаблони позволяват на програмиста да създава програма-основа (skeleton application) с настройки и gems по избор. RubyGems е софтуер (package manager) управляващ разпределението на програми и библиотеки написани на езика Ruby, в самостоятелен формат наречен „gem“. Различните видове engines (програма която изпълнява основни и същински функции за други програми) от своя страна, позволяват на разработчика лесно да преизползва части от апликацията/ програмата с готови пътища, връзки (paths) и модели. От друга страна интерфейса на Rack (уеб сървър) и Rails Metal (Metal е начин да се заобиколи стандартното изпълнение на Rails HTTP заявки, с цел значително увеличение на скоростта), позволяват на разработчика да пише програмен код оптимизиран около Action Controller.[3]

На 23 декември 2008 Merb, друга софтуерна рамка за уеб приложения, е пусната на пазара. От Ruby on Rails обявяват, че ще работят заедно с Merb, за да приложат най добрите идеи на Merb в Rails 3, като по този начин приключат „ненужното повторение“ между двете общности. Merb се слива с Rails, като част от версия Rails 3.0.[4][5]

На 31 август 2011 е пусната версия Rails 3.1. Тя включва Reversible Database Migrations, Asset Pipeline, Streaming, jQuery като библиотека по подразбиране за JavaScript и наскоро добавените в стека CoffeeScript и Sass.[6]

На 20 януари 2012 е пусната версия Rails 3.2. Тя включва начин за по-бърза разработка, routing engine (още известен като Journey engine), Automatic Query Explain и Tagged Logging.[7] Rails 3.2.x е последната версия която поддържа Ruby 1.8.7.[8] Rails 3.2.12 поддържа Ruby 2.0.[9]

На 25 юни 2013 е пусната версия Rails 4.0. В нея са представени Russian Doll Caching, Turbolinks и Live Streaming. Компоненти като Active Resource и Active Record Observer, стават с възможност за избор, чрез разделянето им на gems. [10]

На 8 април 2015 е пусната версия Rails 4.1, въвеждайки Spring, Variants, Enums, Mailer previews, и secrets.yml.[11]

На 19 декември 2014 е пусната версия Rails 4.2 представяйки Active Job, асинхронни имейли, Adequate Record, Web Console, и foreign keys.[12]

История на версиите
Версия Дата
1.0[13] 13 Декември 2005
1.2[14] 19 януари 2007
2.0[15] 7 Декември 2007
2.1[16] 1 Юни 2008
2.2[17] 21 ноември 2008
2.3[3] 15 март 2009
3.0[4] 29 Август 2010
3.1[6] 31 Август 2011
3.2[7] 20 януари 2012
4.0[10][18] 25 Юни 2013
4.1[11][19] 8 април 2014
4.2[12] 19 Декември 2014


Технически преглед[редактиране | редактиране на кода]

Както много други софтуерни рамки за уеб приложения, Ruby on Rails използва структурата Модел-Изглед-Контролер (MVC), за да организира програмирането на различни апликации.

По подразбиране, модел в софтуерната рамка на Ruby on Rails е свързан към таблица в базата данни и към файл Ruby. Например, модел – клас User, обикновено ще бъде дефиниран във файла ‘user.rb‘, в директорията app/models, и ще е свързан с таблица ‘users‘ в базата данни. Въпреки че, програмистите имат свободата да пренебрегнат конвенцията, като изберат различни имена за техните модели, файлове и таблици, това не е често срещана практика и не се поощрява в съответствие с философията „Конвенция над Конфигурация“ (CoC).

Контролерът (controller) е компонент от сървърната страна на Rails, който отговаря на външни заявки от уеб сървър към приложението, той определя кой изглед да бъде визуализиран. Контролерът може също да направи заявка/ запитване към един или повече модели, за информация и да изпрати тази информация директно към изгледа. Един контролер може да отговаря за едно или повече действия. В Ruby on Rails, действието, обикновено е основна единица, която описва как да се отговори на заявката на външен уеб браузър. Също трябва да се отбележи, че контролер или действие са достъпни до външни заявки, само ако съответният път (route) е свързан към него. Rails насърчава разработчиците да използват RESTful routes, които включват действия като: създай, нов, редактирай, актуализирай, унищожи, покажи и индексирай. Връзките, на идващите заявки и пътища, към действията на контролера, могат лесно да бъдат настроени в routes configuration file.

В конфигурацията на Rails, по подразбиране, изгледът е erb файл, който се конвертира в HTML по време на изпълнението. Има много алтернативни варианти на шаблони, които се използват за изгледи.

Ruby on Rails включва инструменти, които значително улесняват задачите на разработчика и са предварително “готови за употреба”. Пример за това е scaffolding, който автоматично конструира някои от моделите и изгледите нужни за един обикновен website.[20] Други примери са WEBrick, елементарен Ruby уеб сървър, който се разпространява с Ruby и Rake, готова система, разпространявана като gem. Заедно с Ruby on Rails, тези инструменти осигуряват една основна среда за разработка.

В повечето случаи Ruby on Rails не е свързан директно с интернет, а през някакъв front-end web server. Първоначално Mongrel е бил предпочитаният пред WEBrick, но той също може да работи и на Lighttpd, Apache, Cherokee, Hiawatha, nginx (като модул – Phusion Passenger например – или като CGI, FastCGI или mod_ruby) и много други. От 2008 г. нататък, Passenger измества Mongrel като най-използвания уеб сървър за Ruby on Rails.[21] Ruby също се поддържа от IBM i.[22]

Ruby on Rails е също забележителен с широкото си използване на JavaScript библиотеки, Prototype и Script.aculo.us, за писане на Ajax функции.[23] Ruby on Rails първоначално използва лек SOAP за уеб услуги; по-късно бива заменен от RESTful уеб услуги. Ruby on Rails 3.0 използва техника наречена Unobtrusive JavaScript за разделяне на функционалността (или логиката) от структурата на уеб страницата. jQuery се поддържа като заместник на Prototype и е основната JavaScript библиотека в Rails 3.1, отразяваща движението на индустрията в посока към jQuery. Допълнително, CoffeeScript е представен в Rails 3.1 като основен Javascript език по подразбиране.

От версия 2.0, Ruby on Rails предлага HTML и XML като стандартни изходни формати.

Rails 3.1 представя Sass като стандартен вариант за създаване на CSS шаблон.

По подразбиране сървърът използва Embedded Ruby в HTML изгледи, с файлове с html.erb разширение. Rails поддържа swapping-in алтернативни шаблонни езици, като HAML и Mustache.

Ruby on Rails 3.0 е проектирана да работи с Ruby 1.8.7, Ruby 1.9.2, и JRuby 1.5.2+; Предишни версии не се поддържат.[24]

Ruby on Rails 3.2 е последната серия от версии, която поддържа Ruby 1.8.7.

Структура на рамката[редактиране | редактиране на кода]

Ruby on Rails е разделен на различни пакети, а именно ActiveRecord (обектно-релационна mapping система за достъп до бази данни), Active Resource (осигурява уеб услуги), Action Pack, Active Support и Action Mailer. Преди версия 2.0, Ruby on Rails също съдържа Action Web Service пакет, който понастоящем е заменен от Active Resource. Отделно от стандартните пакети, разработчиците могат да правят плъгини за разширяване на съществуващи пакети.

Инсталиране[редактиране | редактиране на кода]

Ruby on Rails често е инсталирана посредством RubyGems пакетен мениджър,[25] който е включен към текущата версия на Ruby. Много безплатни Unix-подобни системи също поддържат инсталация на Ruby on Rails и разширения през вградените package management системи.

Ruby on Rails обикновено се внедрява с база данни като например MySQL или PostgreSQL, и уеб сървър като Apache работещ с Phusion Passenger модул.

Философия и дизайн[редактиране | редактиране на кода]

Ruby on Rails е предназначен да набляга на Конвенция над Конфигурация (CoC) и Don't Repeat Yourself (DRY) принципите.

“Convention over Configuration” (Конвенция над Конфигурация) означава, че разработчика трябва да уточни само неконвенционалните аспекти на приложението. Например ако има клас с име “Продажба” (Sale) прилежащата му таблица в базата данни трябва да бъде “продажби” по подразбиране. Като цяло конвенциите на Ruby on Rails водят до по-малко код и по-малко повторения.

„Don’t repeat yourself“ принципът означава, че информацията се съхранява на едно място. Например при използване на ActiveRecord модула на Rails, разработчика не е нужно да указва имена на колони в базата данни при дефиниране на класове. Вместо това Ruby on Rails може да получи тази информация от базата данни на база името на класа.

“Fat models, skinny controllers” означава, че по-голямата част от логиката на приложението трябва да бъде позиционирана в моделът, докато контролерът остава колкото се може по-прост.

Търговски марки[редактиране | редактиране на кода]

През месец март 2007 г. Дейвид Хайнемайер Хансън подава три заявления за регистрация на търговски марки към щатските патентни служби. Заявленията са относно фразата „RUBY ON RAILS“,[26], думата „RAILS“,[27]и официалното Rails лого.[28] Като последствие, през лятото на 2007г, Хенсън отказва правото на Apress да използва логото на Ruby on Rails на корицата на нова книга, написана от едни от най-авторитетните членове на Rails общността. Това е причината за надигането на учтив протест в Ruby on Rails общността.[29]В отговор на тези критики Хенсън отговаря със следното:

„Давам разрешение за ползване на логото на Rails само за продукти, в които участвам пряко. Такива са книги, в чиито процес на разработка съм взел участие или конференции, в които съм част от изпълнението. Най-категорично ще се стремя да наложа всички търговски марки на Rails.“

Скалируемост[редактиране | редактиране на кода]

Rails вървящ на интерптретатор Matz's Ruby e критикуван заради проблеми със скалируемостта (възможността на една система да се разширява, за да поеме увеличеното количество работа)[30]. Тези критици често споменават различни прекъсвания на Twitter през 2007 и 2008, които ускориха прехода към Scala (работещо на Java виртуална машина) за тяхната queueing system и друг мидълуер.[31][32] Частите с потребителски интерфейс от сайта продължават да работят на Ruby on Rails[33] до 2011 г. докато не са заменени заради опасения относно производителността.[34]

През 2011 година Gartner Research отбелязва, че въпреки критиките и сравненията с Java, много от фирмите използват Ruby on Rails за разработката на бързи уеб апликации. Някои от най-големите уеб сайтове работещи с Ruby on Rails включват GitHub, Yammer, Scribd, Shopify, Hulu, and Basecamp.[35] Към месец септември 2015 повече от 800 000 сайта използват Ruby on Rails.[36]

Сигурност[редактиране | редактиране на кода]

На 24 септември 2013 е отчетен проблем със сигурността на съхраняваните cookie-та. По подразбиране целият хеш на сесията е се съхранява посредством cookie наречено CookieStore, разрешаваща на всяка оторизирана сесия притежаваща the session cookie да бъде логната като target user във всеки един следващ момент. Като решение администраторите са посъветвани да конфигурират cookie-тата за съхранение на сървъра посредством механизми като ActiveRecordStore.[37]

Разработчици[редактиране | редактиране на кода]

Основният екип на Ruby on Rails от 5 юни 2015 г. се състои от Heinemeier Hansson, Jeremy Kemper, Michael Koziarski, José Valim, Santiago Pastorino, Aaron Patterson, Xavier Noria, Rafael França, Andrew White, Guillermo Iguaran, Carlos Antonio, Yves Senn, и Godfrey Chan. От основния екип Aaron Patterson е най-известен покрай редовните си изяви на RailsConf и други подобни конференции. Той е известен както с хумористичните си изяви на RailsConf tals, така и със значителни заслуги за резултатите и сигурността на рамката на Rails.

Източници[редактиране | редактиране на кода]

  1. Какво е „Rails“
  2. http://weblog.rubyonrails.org/2006/8/7/ruby-on-rails-will-ship-with-os-x-10-5-leopard/
  3. а б http://weblog.rubyonrails.org/2009/3/16/rails-2-3-templates-engines-rack-metal-much-more/
  4. а б http://edgeguides.rubyonrails.org/3_0_release_notes.html
  5. http://sdtimes.com/ruby-on-rails-3-0-goes-modular/
  6. а б http://guides.rubyonrails.org/3_1_release_notes.html
  7. а б http://guides.rubyonrails.org/3_2_release_notes.html
  8. http://weblog.rubyonrails.org/2011/12/20/rails-master-is-now-4-0-0-beta/
  9. https://github.com/rails/rails/pull/9406
  10. а б http://weblog.rubyonrails.org/2013/6/25/Rails-4-0-final/
  11. а б http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/
  12. а б http://weblog.rubyonrails.org/2015/8/24/Rails-4-2-4-and-4-1-13-have-been-released///
  13. „Rails 1.0: Party like it's one oh oh!“. Riding Rails. Retrieved June 9, 2010.
  14. „Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations“. Riding Rails. Retrieved June 9, 2010.
  15. „Rails 2.0: It's done!“. Riding Rails. Retrieved June 9, 2010.
  16. Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc. Riding Rails. Retrieved June 9, 2010.
  17. „Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs“. Riding Rails. Retrieved June 9, 2010.
  18. [1] blog.wyeworks.com
  19. [2] weblog.rubyonrails.org
  20. http://fairleads.blogspot.bg/2007/12/rails-20-and-scaffolding-step-by-step.html
  21. http://rubyonrails.org/deploy/
  22. http://iprodeveloper.com/application-development/powerruby-brings-enterprise-ruby-rails-support-ibm-i
  23. http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html
  24. http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done/
  25. http://rubyonrails.org/download/
  26. http://tsdr.uspto.gov/#caseNumber=77119206&caseType=SERIAL_NO&searchType=statusSearch
  27. http://tsdr.uspto.gov/#caseNumber=77119210&caseType=SERIAL_NO&searchType=statusSearch
  28. http://tsdr.uspto.gov/#caseNumber=77119208&caseType=SERIAL_NO&searchType=statusSearch
  29. http://www.rubyinside.com/david-heinemeier-hansson-says-no-to-use-of-rails-logo-567.html
  30. https://en.wikipedia.org/wiki/Scalability
  31. http://www.artima.com/scalazine/articles/twitter_on_scala.html
  32. http://www.theregister.co.uk/2009/04/01/twitter_on_scala/
  33. http://blog.evanweaver.com/2009/09/24/ree/
  34. https://blog.twitter.com/2011/twitter-search-now-3x-faster
  35. http://www.businessinsider.com/heres-why-ruby-on-rails-is-hot-2011-5
  36. http://trends.builtwith.com/framework/Ruby-on-Rails
  37. https://threatpost.com/security-issue-in-ruby-on-rails-could-expose-cookies/102413/

Външни препратки[редактиране | редактиране на кода]

  • Официален уебсайт на Ruby on Rails
  • Railscasts.com – сайт с кратки епизоди, които са фокусирани върху техниката на Rails (последните са от 2013 г.)
  • Rubycasts.io – седмични 15 минутни епизоди върху развитието на Ruby/ Rails
  • Railstutorial.org/ – сайт за обучение (tutorial), съдържа книга и епизоди които учат как да създадем приложение от Ruby on Rails.
  • Сорс кодът на Rails
Криейтив Комънс - Признание - Споделяне на споделеното Лиценз за свободна документация на ГНУ Тази страница частично или изцяло представлява превод на страницата „Ruby on Rails“ в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс - Признание - Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година — от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница. Вижте източниците на оригиналната статия, състоянието ѝ при превода, и списъка на съавторите.