Направо към съдържанието

Ruby on Rails

от Уикипедия, свободната енциклопедия
Ruby on Rails
Информация
Разработчик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
7.1 5 октомври 2023


Технически преглед

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

Както много други софтуерни рамки за уеб приложения, 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 критикуван заради проблеми със скалируемостта (възможността на една система да се разширява, за да поеме увеличеното количество работа). Тези критици често споменават различни прекъсвания на Twitter през 2007 и 2008, които ускориха прехода към Scala (работещо на Java виртуална машина) за тяхната queueing system и друг мидълуер.[30][31] Частите с потребителски интерфейс от сайта продължават да работят на Ruby on Rails[32] до 2011 г. докато не са заменени заради опасения относно производителността.[33]

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

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

Основният екип на 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. weblog.rubyonrails.org // Архивиран от оригинала на 2015-09-05. Посетен на 2015-09-27.
  3. а б weblog.rubyonrails.org // Архивиран от оригинала на 2016-05-03. Посетен на 2015-09-27.
  4. а б edgeguides.rubyonrails.org
  5. sdtimes.com
  6. а б guides.rubyonrails.org
  7. а б guides.rubyonrails.org
  8. weblog.rubyonrails.org // Архивиран от оригинала на 2012-09-03. Посетен на 2015-09-30.
  9. github.com
  10. а б weblog.rubyonrails.org // Архивиран от оригинала на 2016-04-27. Посетен на 2015-09-30.
  11. а б weblog.rubyonrails.org // Архивиран от оригинала на 2015-12-08. Посетен на 2015-09-28.
  12. а б weblog.rubyonrails.org // Архивиран от оригинала на 2015-09-29. Посетен на 2015-09-30.
  13. „Rails 1.0: Party like it's one oh oh!“ Архив на оригинала от 2015-12-17 в Wayback Machine.. Riding Rails. Посетен на 9 юни 2010.
  14. „Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations“ Архив на оригинала от 2012-11-02 в Wayback Machine.. Riding Rails. Посетен на 9 юни 2010.
  15. „Rails 2.0: It's done!“. Riding Rails. Посетен на 9 юни 2010.
  16. Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc Архив на оригинала от 2012-11-02 в Wayback Machine.. Riding Rails. Посетен на 9 юни 2010.
  17. „Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs“ Архив на оригинала от 2008-12-02 в Wayback Machine.. Riding Rails. Посетен на 9 юни 2010.
  18. blog.wyeworks.com, архив на оригинала от 4 декември 2012, https://web.archive.org/web/20121204083513/http://blog.wyeworks.com/2012/10/29/rails-4-in-30-minutes/, посетен на 28 септември 2015 
  19. weblog.rubyonrails.org // Архивиран от оригинала на 2015-12-08. Посетен на 2015-09-28.
  20. fairleads.blogspot.bg
  21. rubyonrails.org, архив на оригинала от 5 октомври 2015, https://web.archive.org/web/20151005233337/http://rubyonrails.org/deploy/, посетен на 30 септември 2015 
  22. iprodeveloper.com, архив на оригинала от 9 октомври 2013, https://web.archive.org/web/20131009010101/http://iprodeveloper.com/application%2Ddevelopment/powerruby%2Dbrings%2Denterprise%2Druby%2Drails%2Dsupport%2Dibm%2Di, посетен на 30 септември 2015 
  23. api.rubyonrails.org
  24. weblog.rubyonrails.org // Архивиран от оригинала на 2015-11-02. Посетен на 2015-09-30.
  25. rubyonrails.org, архив на оригинала от 27 септември 2015, https://web.archive.org/web/20150927213645/http://rubyonrails.org/download/, посетен на 30 септември 2015 
  26. tsdr.uspto.gov
  27. tsdr.uspto.gov
  28. tsdr.uspto.gov
  29. www.rubyinside.com
  30. www.artima.com
  31. www.theregister.co.uk
  32. blog.evanweaver.com
  33. blog.twitter.com
  34. www.businessinsider.com
  35. trends.builtwith.com
  36. threatpost.com
  Тази страница частично или изцяло представлява превод на страницата Ruby on Rails в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​