Начинаем знакомится с Ruby on Rails
июня 26, 2010 | Published in Ruby on Rails | 7 Comments
Данная статья является частью Учебника Rails и вместе с тем первой частью перевода первой статьи из оффициальной документации (гайда Rails) по Rails3 с сайта RailsGuides — статьи .
Некоторое время я не мог писать статьи в блог и причиной тому была сессия, которая на данный момент считается успешно сданной. Теперь-то я постараюсь писать почаще и переводить самые актуальные и интересные статьи, а еще я начинаю новую рубрику посвященную разработке веб приложений на замечательном веб фреймворке . Начнем с ознакомительной статьи.
Ruby on Rails — поистине один из самых мощных фреймворков для разработки веб приложений. Факт превосходства над любым другим фреймворком в плане скорости разработки не оспорим, с этим соглашаются даже заядлые враги Рубистов — Пайтониты =)
Ценой такого могущества и упрощения/ускорения разработки является производительность. Дело в том, что сайты, созданные на Rails уступают в скорости работы сайтам на других менее развитых Ruby-фреймворках, не говоря уже о Python и PHP — фреймворках. Что ж, язык Ruby сам по себе ориентирован не на высокую производительность в плане скорости работы, а на высокую производительность в плане написания кода.
Я, наверное, вас напугал тем, что Rails очень прожорливый зверь? На самом деле все не так уж страшно и любые сложности решаются кэшированием либо покупкой дополнительного сервера/серверов, благо они сейчас не такие уж дорогие, а на маленьких проектах вы и не заметите никакого отставания, зато ваш сайт вы сможете создать за неделю, при том, что туже функциональность на других фреймворках придется реализовывать в разы дольше.
Чем же так хорош Rails?
1. Быстрая, гибкая разработка проектов любого масштаба.
2. Надежность, продуманность фреймворка и компетентность, и профессионализм людей, которые занимаются его разработкой.
3. Огромное сообщество разработчиков и огромное количество документации.
4. Огромное количество плагинов и расширений.
5. Отлично реализованное тестирование, которое помогает сэкономить огромное количество времени и защитить ваши проекты.
6. Множество написанных на Rails CMS, которые позволяют вести разработку с более высокого уровня.
7. На Rails написано огромное количество известных сайтов из которых такие монстры как: twitter и shopify.
8. Развитая философия Rails да и самого Ruby, которая включает такие принципы:
— Принцип DRY — «Don’t Repeat Yourself (не повторяйтесь)» — предполагает, что написание одного и того же кода — это очень плохая идея. Согласно этому принципу каждый фрагмент кода должен набираться лишь один раз и быть доступным для всех участков программы, где он может понадобиться.
— Принцип «Соглашение превыше конфигурации (настроек)» предполагает то, что Rails понимает, что вы хотите сделать и как исходя из уже встроенных в Rails соглашений, что позволяет значительно ускорить разработку не затрачивая времени на объяснение фреймворку что от него требуется сделать через бесконечные конфигурационные файлы.
— REST -»Representational State Transfer (передача состояния представления)» — это отличный паттерн, который основан на ресурсах и стандартных HTTP-запросах, и является самым удобным и быстрым способом создания веб-приложений.
9. MVC — архитектура. Model, View, Controller — представляют собою классы — кирпичики нашего приложения, при этом код работающий с данными, код управляющий внешним видом нашего приложения и код выполняющий все остальные операции, разделены. Таким образом мы получаем не винегрет из кода, а качественно структурированный код, что несомненное позволяет ускорить разработку, облегчить тестирование и устранение багов, а также добиться огромной гибкости.
— Models (модели) — модели представляют собою информацию (данные) в приложении и правила манипуляции этими данными. В Rails модели, прежде всего, используются для управления правилами взаимодействия с соответствующей таблицей баз данных. Во многих случаях, одна таблица в вашей базе данных будет соответствовать одной моделей в вашем приложении. Большая часть бизнес-логики вашего приложения будет содержаться именно в моделях.
— View «вид, представление» - представляет собой пользовательский интерфейс вашего приложения. В Rails, вид зачастую представляется обыкновенными HTML файлами с включениями кода на Ruby, который выполняет задачи связанные исключительно с представлением данных. Вид выполняет работу по передачи данных веб-браузеру или другой программе, которая «общается» с вашим приложением.
— Controller — контроллер. Контроллер представляет собой цемент, которые соединяет собой модели и виды. В Rails контроллеры ответственны за процесс поступления запросов из браузера, опрос моделей данных и передачу данных Представлению для их дальнейшего отображению клиенту.
Ruby on Rails представляет собой агломерат из нескольких частей, которые могут быть использованы отдельно, например, в других фреймворках.
Основные составляющие Rails это:
Action Pack
—Action Controller
—Action Dispatch
—Action View
Action Mailer
Active Model
Active Record
Active Resource
Active Support
Railties
Action Pack — gem, который состоит из Action Controller, Action View и Action Dispatch и представляет собой «VC»-часть паттерна MVC (модель-вид-контроллер).
Action Controller - компонент который управляет контроллерами в Rails-приложении. Фреймворк Action Controller обрабатывает поступающие к Rails-приложению запросы, извлекает из них некоторые параметры и отсылает их по назначению. Возможности, которые предоставляет нам Action Controller это управление сессиями, генерирование шаблонов, и управление перенаправлениями.
Action View — управляет представлением («V» в MVC-паттерне) Rails-приложения. Action View может по-умолчанию генерировать HTML и XML код. Action View управляет генерацией шаблонов, включая вложенные шаблоны и шаблоны отдельных элементов страницы представления приложения, и включает в себя встроенную поддержку AJAX.
Action Dispatch — выполняет маршрутизацию веб-запросов и передает их любым необходимым вам образом вашему приложению на Rails или любому другому приложению, основанному на Rack.
Action Mailer предоставляет средства для построения e-mail сервисов. Вы можете использовать Action Mailer для получения и обработки входящих email и отправки, как простых текстовых сообщений, так и электронных писем состоящих из графических и любых других файлов, при этом основываясь на гибких шаблонах.
Active Model - позволяет определять интерфейс между gem’ом Action Pack и паттерном ORM (Object Relationship Mapping) реализованным в виде различных gem’ов, например Active Record. Active Model позволяет использовать в приложениях на Rails вместо Active Record, который используется в Rails по умолчанию другие ORM-фреймворки.
Active Record — основа того, что называется моделями в приложениях Rails («M» в MVC — паттерне). Active Record предоставляет независимость от используемой базы данных (абстрагирование от БД), предоставляет базовую CRUD (Create, Read, Update, Delete) — функциональность, продвинутые способности поиска по базе данных и возможность связывать модели с другими частями приложения. Active Record реализует паттерн ORM, который позволяет представлять таблицу базы данных в виде объекта.
Active Resource предоставляет средтва для взаимодействия объектов бизнес-логики и REST веб-сервисов. Он позволяет отображать веб-ресурсы на локальные объекты с CRUD-семантикой.
Active Support — это обширная коллекция полезных классов и расширений стандартной библиотеки Ruby, которые могут быть использованы для написания, как Rails-приложений, так и в работе над самим ядром Rails.
Railties — ядро, душа Rails, которые создают новое приложение Rails и объединяют различные фреймворки и плагины вместе в Rails-приложении.
Выше мы уже упоминали нечто REST и даже давали краткое описание сего термина, однако, я уверен, что из данного выше описания вы мало чего поняли, поэтому я хочу направить вас на статью в Википедии посвященную этому вопросу: , в которой более-менее понятно дается описание сей архитектуры сетевых протоколов. Если смотреть на REST через призму Rails, мы увидим два следующих принципа, которые повсеместно встречаются при разработке приложений на Rails:
- Использование идентификаторов ресурсов, например, таких, как URL для представления этих самых ресурсов.
- Передача представлений состояния ресурсов между компонентами системы.
Для примера, в консоли приложения Rails выполняем следующий запрос:
DELETE /photos/17
Из примера понятна связь между ресурсом-фотографией c ID равным 17, и требование выполнить действие — удаление этого ресурса, т.е. фотографии. REST выглядит естественным стилем для архитектуры веб-приложений и Rails скрывает от вас множество сложностей, связанных с особенностями разных браузеров.
Эта статья познакомила вас с мощным инструментом — фреймворком Ruby on Rails. В следующей статье я опишу процесс установки Rails, а также процесс создания приложения, и вы создадите свое первое Rails — приложение.
августа 3, 2010 at 15:34 (#)
Какие есть CMS написанные на RoR?
Сам CMS не пользуюсь, но бывает нужно. В инете нашел несколько, но либо еще сырая, либо в разработке… Наверное плохо искал:)
Спасибо
августа 3, 2010 at 18:33 (#)
На самом деле CMS написанных на Rails достаточно много, самыми известными являются Refinery и Radiant, еще говорят, что Zena хорошая CMS’ка. Эти CMS не сырые, на них создано множество проектов и многие студии используют их для более быстрой разработки(чем с использованием самих Rails) типичных сайтов.
января 28, 2011 at 11:58 (#)
Посмотрел код на Raby. Код не Си-подобный, а — паскалеподобный. Но ведь наиболее продвинутые технологии Java, JavaScrip и C# — Си-подобны. И это не случайно. Прежде чем брать за основу синтаксис для языка — люди долго думали.
Создатели Raby всех дураками считают? Предлагают вернуться назад, к Паскалю?
января 28, 2011 at 12:00 (#)
Программист-математик более 30 лет. (Ещё в перфокартах лезвием дырки ковырял.)
Web-мастер с 1996 года. Создал более десятка Internet-магазинов. (qptova.ru)
В данный момент специализируюсь на разработке ПО для мобильного Internet: spyco.ru
Я это к тому, что не чайник я.
Вот чего понять не могу: зачем нужны Perl, PHP, Piton, Raby… всё, что работает только на серверен, и не работает в браузере, и так не похожи на Си.
января 28, 2011 at 12:44 (#)
>>> Посмотрел код на Raby. Код не Си-подобный, а – паскалеподобный. Но ведь наиболее продвинутые технологии Java, JavaScrip и C# – Си-подобны. И это не случайно. Прежде чем брать за основу синтаксис для языка – люди долго думали.
Люди мыслят теми категориями среди которых живут. Подумайте, разви Си-программист мог написать Лисп-подобный язык? Мог бы, но для этого необходимо выйти из собственной зоны комфорта.
Хотите сказать, что Си-подобный синтаксис — залог успеха даже самого неудачно спроектированного языка? Ну, например как упомянутый вами javaScript. Мне и еще многим javascript кажется ужасным, но аналогов ему нету… Разве что CoffeScript, да и он мне кажется сыроватым, хотя его некоторые более-менее известные проекты использовали в продакшене.
>>> Создатели Raby всех дураками считают? Предлагают вернуться назад, к Паскалю?
На самом деле программисты Ruby никого не считают дураками. Мы сами — дураки, а вы даже и не смотрите на этот мерзкий паскале-подобный Ruby =)
>>> Вот чего понять не могу: зачем нужны Perl, PHP, Piton, Raby… всё, что работает только на серверен, и не работает в браузере, и так не похожи на Си.
Вы удивитесь когда увидите Лисп и языки произошедшие от него: Clojure, Scheme и т.д. Они еще больше не похожи на Си, чем Ruby однако хорошо себе чувствуют и продолжают развиваться. А еще есть язык Erlang, вы не поверите, но это язык достаточно узкого применения. Не то, чтобы он накладывает какие-то ограничения, просто его более целесобразно использовать там, где есть какие-нибудь потоки данных (видеохостинг, телефонные компании, различные вебкам-серверы и т.д.). Сам я с ним не работал, поэтому не много могу сказать, но я совершенно уверен в том, что он тоже в браузере не работает, так же, как и хваленый вами Си. Или вы создали какое-нибудь расшрение для браузера, которое позволяет выполнять скрипты на Си?
Всем хватает javascript и технологии, которые стоят на плечах гиганта. В будущем,возможно, появится возможность писать client-side скрипты на нескольких языках помимо javascript, язык Си в ряд ли будут для этого использовать, а Ruby для этих целей самое то.
Представьте, что у вас есть огромный дюбель, который вам необходимо по какой-либо причине забить в стену, а у вас имеется лишь маленький молоточек для этого. Подумайте как долго и мучительно вы будите его забивать. А теперь представьте, что у вас есть специальный пистолет для забивания дюбилей. Вот вам аналогия для того, зачем необходим Ruby если есть Си. Еще сейчас развивается за счет дотаций Японии проект «Rite» — потомок Ruby от создателя Ruby, который будет предназначен для разработки всего того, где сейчас используется Си. Возможно через 5 — 10 лет Си будет похоронен в музее истории и javascript вместе с ним =)
P.S.: Правильно писать не «Piton», а «Python» и не «Raby», а «Ruby».
августа 6, 2011 at 04:19 (#)
Вообще, абстрактные разговоры про тормоза рельсов уже приелись. Просмотрел выдачу, конкретных цифр нигде нет. Есть только факт, что руби — интерпретируемый язык, из которого они, собственно, и следуют. Мне кажется, реальные «тормоза» преувеличены. А большинство, скорее всего, отпугивает высокий «порог вхождения», что приводить к необходимости искать дополнительные причины преимущества пхп.
Хотел спросить насчет достоверных данных, но, покопавшись, сам нашел несколько полезных ссылок, по которым, действительно старая версия руби была довольно тормозной, но сейчас пхп, питон, руби примерно сравнялись по производительности. Много где утверждалось, что руби быстрее, но достоверность тех данных сомнительная.
вот тут сравнение многих языков, достаточно объективное, на мой взгляд.
любителям руби:)
>P.S.: Правильно писать не «Piton», а «Python» и не «Raby», а «Ruby».
Программист-математик с 30 летним стажем ваще убил.
августа 6, 2011 at 13:21 (#)
alder, спасибо за коммент. Подозреваю, что программист со стажем — троль, но оставил комментарий ради лулзов. Ехуда Кац — уважаемый в Ruby/Rails, JavaScript/JQuery сообществах человек на одной из конференций раскрыл тему касательно улучшений производительности Ruby, 1.9.2 по многи тестам опережает Python 3, PHP5.3, Perl и услпает из интерпретируемых языков только Python 2.x. Видео выступления было, если не ошибаюсь на конфреке.