Ruby on Rails

Поделись знанием:
Перейти к: навигация, поиск
Ruby on Rails
К:Википедия:Статьи без изображений (тип: не указан)

Ruby on Rails (RoR) — фреймворк, написанный на языке программирования Ruby, реализует архитектурный шаблон Model-View-Controller для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером баз данных. Является открытым программным обеспечением и распространяется под лицензией MIT.

Создан Давидом Хейнемейером Ханссоном на основе его работы в компании 37signals над средством управления проектами Basecamp и выпущен в июле 2004 года. 23 декабря 2008 года команда проекта Merb объединилась с командой Rails с целью создания следующей версии Rails 3, которая объединит в себе лучшие черты обоих фреймворков.

Базируется на следующих принципах разработки приложений:

  • максимальное использование механизмов повторного использования, позволяющих минимизировать дублирование кода в приложениях (принцип Don’t repeat yourself);
  • по умолчанию используются соглашения по конфигурации, типичные для большинства приложений (принцип Convention over configuration) — явная спецификация конфигурации требуется только в нестандартных случаях.




Архитектура

Основными компонентами приложений на Ruby on Rails являются модель (англ. model), представление (англ. view) и контроллер (англ. controller). Ruby on Rails использует REST-стиль построения веб-приложений.

Модель предоставляет остальным компонентам приложения объектно-ориентированное отображение данных (таких как каталог продуктов или список заказов). Объекты модели могут осуществлять загрузку и сохранение данных в реляционной базе данных, а также реализуют бизнес-логику.

Для хранения объектов модели в реляционной СУБД по умолчанию в Rails 3 использована библиотека ActiveRecord. Конкурирующий аналог — DataMapper. Существуют плагины для работы с нереляционными базами данных, например Mongoid для работы с MongoDB.

Представление создаёт пользовательский интерфейс с использованием полученных от контроллера данных. Представление также передает запросы пользователя на манипуляцию данными в контроллер (как правило, представление не изменяет непосредственно модель).

В Ruby on Rails представление описывается при помощи шаблонов ERB — файлов HTML с дополнительными включениями фрагментов кода Ruby (Embedded Ruby или ERb). Вывод, сгенерированный встроенным кодом Ruby, включается в текст шаблона, после чего получившаяся страница HTML возвращается пользователю. Кроме ERB возможно использовать ещё около 20 шаблонизаторов, в том числе Haml.

Контроллер в Rails — это набор логики, запускаемой после получения HTTP-запроса сервером. Контроллер отвечает за вызов методов модели и запускает формирование представления.

Соответствие интернет-адреса с действием контроллера (маршрут) задается в файле config/routes.rb.

Контроллером в Ruby on Rails является класс, наследованный от ActionController::Base. Открытые методы контроллера являются так называемыми действиями (actions). Действия часто соответствует отдельному представлению. Например, по запросу пользователя admin/index будет вызван метод index класса AdminController и затем использовано представление index.html.erb из директории views/admin.

Интеграция

Предпочтительным методом интеграции с веб-серверами является проксирование — использование веб-сервера в качестве прокси-сервера перед сервером приложения. Особняком стоят модули Phusion Passenger для интеграции с серверами Apache и nginx.

Ruby on Rails использует интерфейс Rack, что позволяет использовать менее распространённые механизмы (FCGI, CGI, SCGI). Ruby on Rails может работать с Apache, Lighttpd или любым другим веб-сервером, поддерживающим FastCGI. Для разработки и отладки часто используется веб-сервер WEBrick, встроенный в Ruby, или Mongrel.[1] В качестве сервера базы данных поддерживаются MySQL, Firebird, PostgreSQL, DB2, Oracle и Microsoft SQL Server. Также поддерживается встраиваемая база данных SQLite.

Для Windows существует дистрибутив Instant Rails c настроенной и готовой к работе сразу после установки рабочей средой для разработки Rails-приложений, которая включает в себя сервер Apache и СУБД MySQL. Для платформ Windows, Linux, Mac OS X имеется комплексный установщик BitNami RubyStack[2], включающий в себя все необходимое для разработки в среде Rails, включая Ruby, RubyGems, Ruby on Rails, MySQL, Apache, Mongrel и Subversion.

Помимо этого сайты BitNami.org и JumpBox.com[3] бесплатно предлагают образы VMware с готовой Linux-средой для развертывания RoR-приложений. Эти образы можно подключить к своему серверу виртуальных машин или развернуть в предлагаемой облачной среде.

Для разработки AJAX-приложений в RoR по умолчанию используется javascript-фреймворк jQuery, однако вместо него можно использовать и другие библиотеки. В ранних версиях Ruby on Rails (до 3.1), js-фреймворком по умолчанию был Prototype.

Подключаемые библиотеки

Вокруг Rails сложилась большая экосистема плагинов, которые также называются «джемы» (gem с англ. — «самоцвет»). Для управлениями плагинами существует специальная система RubyGems. Некоторые из них со временем были включены в базовую поставку Rails, например Sass и CoffeeScript; другие же, хотя и не были включены в базовую поставку, являются стандартом де-факто для большинства разработчиков, например, средство модульного тестирования RSpec.

Начиная с 3-й версии Rails наблюдается тенденция вынесения части функциональных возможностей в отдельные «джемы», отчасти из-за их более быстрого развития, чем сам Rails, отчасти для облегчения фреймворка.

Некоторые джемы: Devise (для аутентификации), CanCan (для авторизации), Kaminari (для разделения записей, извлекаемых из базы данных, или элементов массива по страницам), Faker (для случайной генерации тестовых наборов данных в веб-приложениях), friendly_id (позволяет создавать человеко-понятные веб-адреса), Active Admin (для создания панелей администрирования), CommunityEngine[4] (для создания социальных сетей).

Средства разработки и тестирования

Для создания приложений на Ruby on Rails используются различные текстовые редакторы и IDE, в том числе:

Среди инструментов тестирования приложений, поддерживающих Ruby on Rails:

Использование

Ruby on Rails существенно использовался при создании таких популярных сайтов, как Твиттер, SoundCloud, Airbnb, Diaspora, Groupon, Basecamp, GitHub, Hulu, Scribd, Kickstarter, Change.org.

Напишите отзыв о статье "Ruby on Rails"

Примечания

  1. [mongrel.rubyforge.org/ fauna’s mongrel at master — GitHub]
  2. [bitnami.org/stack/rubystack BitNami :: RubyStack]
  3. [www.jumpbox.com/app/rubyonrails JumpBox for Ruby on Rails Deployment | JumpBox Virtual Appliances and Applications for Cloud Computing]
  4. [communityengine.org/ Community Engine] // A Social Networking Plugin for Ruby on Rails

Литература

  • Тейт Б., Хиббс К. Ruby on Rails. Быстрая веб-разработка. — СПб.: BHV-Петербург, 2008. — 224 с.
  • Хэнссон Д. Х., Томас Д. Гибкая разработка веб-приложений в среде Rails. — СПб.: Питер, 2008. — 720 с.
  • Фоулер Ч. Rails. Сборник рецептов. — СПб.: Питер, 2007. — 256 с.
  • Фернандес О. Путь Rails. Подробное руководство по созданию приложений в среде Ruby on Rails. — Символ-Плюс, 2008. — 768 с.
  • Руби С., Томас Д., Хэнссон Д. Х. Гибкая разработка веб-приложений в среде Rails. — 4-е изд. — Питер, 2012. — 464 с.

Ссылки

  • [rubyonrails.org/ Официальный сайт]  (англ.)
    • [guides.rubyonrails.org/ Руководства]  (англ.)
  • [github.com/rails/rails Проект Ruby on Rails] на сайте GitHub
  • [github.com/arbox/rails-style-guide Rails: руководство по стилю оформления]
  • [www.ibm.com/developerworks/ru/library/j-cb05096/index.html?S_TACT=105AGX99&S_CMP=Q4_T_YDX Пересекая границы: В чём секрет Ruby on Rails?]

Отрывок, характеризующий Ruby on Rails



В Петербурге в это время в высших кругах, с большим жаром чем когда нибудь, шла сложная борьба партий Румянцева, французов, Марии Феодоровны, цесаревича и других, заглушаемая, как всегда, трубением придворных трутней. Но спокойная, роскошная, озабоченная только призраками, отражениями жизни, петербургская жизнь шла по старому; и из за хода этой жизни надо было делать большие усилия, чтобы сознавать опасность и то трудное положение, в котором находился русский народ. Те же были выходы, балы, тот же французский театр, те же интересы дворов, те же интересы службы и интриги. Только в самых высших кругах делались усилия для того, чтобы напоминать трудность настоящего положения. Рассказывалось шепотом о том, как противоположно одна другой поступили, в столь трудных обстоятельствах, обе императрицы. Императрица Мария Феодоровна, озабоченная благосостоянием подведомственных ей богоугодных и воспитательных учреждений, сделала распоряжение об отправке всех институтов в Казань, и вещи этих заведений уже были уложены. Императрица же Елизавета Алексеевна на вопрос о том, какие ей угодно сделать распоряжения, с свойственным ей русским патриотизмом изволила ответить, что о государственных учреждениях она не может делать распоряжений, так как это касается государя; о том же, что лично зависит от нее, она изволила сказать, что она последняя выедет из Петербурга.
У Анны Павловны 26 го августа, в самый день Бородинского сражения, был вечер, цветком которого должно было быть чтение письма преосвященного, написанного при посылке государю образа преподобного угодника Сергия. Письмо это почиталось образцом патриотического духовного красноречия. Прочесть его должен был сам князь Василий, славившийся своим искусством чтения. (Он же читывал и у императрицы.) Искусство чтения считалось в том, чтобы громко, певуче, между отчаянным завыванием и нежным ропотом переливать слова, совершенно независимо от их значения, так что совершенно случайно на одно слово попадало завывание, на другие – ропот. Чтение это, как и все вечера Анны Павловны, имело политическое значение. На этом вечере должно было быть несколько важных лиц, которых надо было устыдить за их поездки во французский театр и воодушевить к патриотическому настроению. Уже довольно много собралось народа, но Анна Павловна еще не видела в гостиной всех тех, кого нужно было, и потому, не приступая еще к чтению, заводила общие разговоры.
Новостью дня в этот день в Петербурге была болезнь графини Безуховой. Графиня несколько дней тому назад неожиданно заболела, пропустила несколько собраний, которых она была украшением, и слышно было, что она никого не принимает и что вместо знаменитых петербургских докторов, обыкновенно лечивших ее, она вверилась какому то итальянскому доктору, лечившему ее каким то новым и необыкновенным способом.
Все очень хорошо знали, что болезнь прелестной графини происходила от неудобства выходить замуж сразу за двух мужей и что лечение итальянца состояло в устранении этого неудобства; но в присутствии Анны Павловны не только никто не смел думать об этом, но как будто никто и не знал этого.
– On dit que la pauvre comtesse est tres mal. Le medecin dit que c'est l'angine pectorale. [Говорят, что бедная графиня очень плоха. Доктор сказал, что это грудная болезнь.]
– L'angine? Oh, c'est une maladie terrible! [Грудная болезнь? О, это ужасная болезнь!]
– On dit que les rivaux se sont reconcilies grace a l'angine… [Говорят, что соперники примирились благодаря этой болезни.]
Слово angine повторялось с большим удовольствием.
– Le vieux comte est touchant a ce qu'on dit. Il a pleure comme un enfant quand le medecin lui a dit que le cas etait dangereux. [Старый граф очень трогателен, говорят. Он заплакал, как дитя, когда доктор сказал, что случай опасный.]
– Oh, ce serait une perte terrible. C'est une femme ravissante. [О, это была бы большая потеря. Такая прелестная женщина.]
– Vous parlez de la pauvre comtesse, – сказала, подходя, Анна Павловна. – J'ai envoye savoir de ses nouvelles. On m'a dit qu'elle allait un peu mieux. Oh, sans doute, c'est la plus charmante femme du monde, – сказала Анна Павловна с улыбкой над своей восторженностью. – Nous appartenons a des camps differents, mais cela ne m'empeche pas de l'estimer, comme elle le merite. Elle est bien malheureuse, [Вы говорите про бедную графиню… Я посылала узнавать о ее здоровье. Мне сказали, что ей немного лучше. О, без сомнения, это прелестнейшая женщина в мире. Мы принадлежим к различным лагерям, но это не мешает мне уважать ее по ее заслугам. Она так несчастна.] – прибавила Анна Павловна.
Полагая, что этими словами Анна Павловна слегка приподнимала завесу тайны над болезнью графини, один неосторожный молодой человек позволил себе выразить удивление в том, что не призваны известные врачи, а лечит графиню шарлатан, который может дать опасные средства.
– Vos informations peuvent etre meilleures que les miennes, – вдруг ядовито напустилась Анна Павловна на неопытного молодого человека. – Mais je sais de bonne source que ce medecin est un homme tres savant et tres habile. C'est le medecin intime de la Reine d'Espagne. [Ваши известия могут быть вернее моих… но я из хороших источников знаю, что этот доктор очень ученый и искусный человек. Это лейб медик королевы испанской.] – И таким образом уничтожив молодого человека, Анна Павловна обратилась к Билибину, который в другом кружке, подобрав кожу и, видимо, сбираясь распустить ее, чтобы сказать un mot, говорил об австрийцах.
– Je trouve que c'est charmant! [Я нахожу, что это прелестно!] – говорил он про дипломатическую бумагу, при которой отосланы были в Вену австрийские знамена, взятые Витгенштейном, le heros de Petropol [героем Петрополя] (как его называли в Петербурге).
– Как, как это? – обратилась к нему Анна Павловна, возбуждая молчание для услышания mot, которое она уже знала.
И Билибин повторил следующие подлинные слова дипломатической депеши, им составленной:
– L'Empereur renvoie les drapeaux Autrichiens, – сказал Билибин, – drapeaux amis et egares qu'il a trouve hors de la route, [Император отсылает австрийские знамена, дружеские и заблудшиеся знамена, которые он нашел вне настоящей дороги.] – докончил Билибин, распуская кожу.
– Charmant, charmant, [Прелестно, прелестно,] – сказал князь Василий.
– C'est la route de Varsovie peut etre, [Это варшавская дорога, может быть.] – громко и неожиданно сказал князь Ипполит. Все оглянулись на него, не понимая того, что он хотел сказать этим. Князь Ипполит тоже с веселым удивлением оглядывался вокруг себя. Он так же, как и другие, не понимал того, что значили сказанные им слова. Он во время своей дипломатической карьеры не раз замечал, что таким образом сказанные вдруг слова оказывались очень остроумны, и он на всякий случай сказал эти слова, первые пришедшие ему на язык. «Может, выйдет очень хорошо, – думал он, – а ежели не выйдет, они там сумеют это устроить». Действительно, в то время как воцарилось неловкое молчание, вошло то недостаточно патриотическое лицо, которого ждала для обращения Анна Павловна, и она, улыбаясь и погрозив пальцем Ипполиту, пригласила князя Василия к столу, и, поднося ему две свечи и рукопись, попросила его начать. Все замолкло.
– Всемилостивейший государь император! – строго провозгласил князь Василий и оглянул публику, как будто спрашивая, не имеет ли кто сказать что нибудь против этого. Но никто ничего не сказал. – «Первопрестольный град Москва, Новый Иерусалим, приемлет Христа своего, – вдруг ударил он на слове своего, – яко мать во объятия усердных сынов своих, и сквозь возникающую мглу, провидя блистательную славу твоея державы, поет в восторге: «Осанна, благословен грядый!» – Князь Василий плачущим голосом произнес эти последние слова.
Билибин рассматривал внимательно свои ногти, и многие, видимо, робели, как бы спрашивая, в чем же они виноваты? Анна Павловна шепотом повторяла уже вперед, как старушка молитву причастия: «Пусть дерзкий и наглый Голиаф…» – прошептала она.
Князь Василий продолжал:
– «Пусть дерзкий и наглый Голиаф от пределов Франции обносит на краях России смертоносные ужасы; кроткая вера, сия праща российского Давида, сразит внезапно главу кровожаждущей его гордыни. Се образ преподобного Сергия, древнего ревнителя о благе нашего отечества, приносится вашему императорскому величеству. Болезную, что слабеющие мои силы препятствуют мне насладиться любезнейшим вашим лицезрением. Теплые воссылаю к небесам молитвы, да всесильный возвеличит род правых и исполнит во благих желания вашего величества».