Статьи

Почему рельсы?

Ваш выбор, когда вы изучаете новый фреймворк, невероятно важен. Требуются бесчисленные часы и усилия, чтобы стать опытным и изучить все лучшие практики — даже для опытных разработчиков.

Вот почему необходимо понимать особенности фреймворка как можно раньше, чтобы определить, является ли это правильным решением проблемы, которую вы пытаетесь решить. В этой статье я расскажу о многих ключевых областях инфраструктуры Ruby on Rails и почему я считаю, что это отличный выбор для веб-разработчиков.


Ruby on Rails был извлечен из приложения для управления проектами Basecamp.

Ruby on Rails был открыт с открытым исходным кодом в 2004 году Дэвидом Хайнемайером Хэннсоном , после извлечения из приложения для управления проектами Basecamp .

Он основан на языке программирования Ruby , и текущая стабильная версия 3.2 — с 4.0 уже не за горами!

RoR — полный стек веб-приложений; начиная с версии 3.1, он также включает в себя средства и библиотеки для управления кодом веб-интерфейса, поддерживает Sass и CoffeeScript из коробки без необходимости использования внешнего инструмента для управления процессом компиляции. Мнение рабочего процесса — это название игры с Rails.

Для разработки он встраивает собственный веб-сервер, поэтому вам не нужно устанавливать дополнительное программное обеспечение, кроме работающей установки Ruby.


Есть бесчисленное множество причин для изучения Rails, от технических до бизнес и производительности. Мы будем решать каждого по одному.

Рубин был разработан, чтобы быть «радостью в использовании».

Как следует из названия, Rails основан на языке Ruby. Изобретенный в 1993 году и впервые выпущенный в 1995 году Юкихиро Мацумото (широко известный просто как «Matz»), Ruby является объектно-ориентированным интерпретируемым языком, который имеет синтаксис, в значительной степени вдохновленный Perl и Lisp. С самого начала Ruby был спроектирован как «радость от использования», что означает сильный акцент на удобочитаемости и элегантности.

Будучи языком более высокого уровня, Ruby чрезвычайно мощный и универсальный, сохраняя при этом хороший баланс ясности и производительности (учитывая, что это все еще интерпретируемый, динамический язык).

Оригинальный интерпретатор Ruby (Ruby Interpreter от Matz, сокращенно MRI) написан на C, но в настоящее время он не единственный, доступный в настоящее время (пара заметных альтернатив — это JRuby , работающий поверх JVM, и Rubinius ).

В состав Ruby входит несколько библиотек, поставляемых с его ядром, в том числе очень мощная модульная тестирующая, называемая Minitest (до Ruby 1.9 Ruby использовал TestUnit).

Rails — это популярный способ общения с Ruby, поэтому в наши дни нередко можно найти людей (включая меня), чье первое знакомство с Ruby было через Rails.

Изучите основы Ruby с помощью Tuts + Premium.

Rails сильно самоуверен, когда дело доходит до архитектурных решений

Rails является независимой от базы данных средой MVC, которая выбирает соглашение по конфигурации, а это означает, что она решительно настроена, когда речь идет об архитектурных решениях, соглашениях об именах, путях и шаблонах.

Подробнее:

  • MVC означает, что он следует парадигме Model-View-Controller, так что вы можете четко разделить проблемы при разработке приложения. Это позволяет вашей основной бизнес-логике находиться в одном месте, избегая дублирования и помогая в обслуживании.

  • Он следует подходу RESTful, ориентированному на ресурсы, что означает, что он побуждает вас думать о своей бизнес-логике с точки зрения данных, предоставляя ресурсы конечным точкам, которые выполняют действия CRUD. Например, вход на сайт может рассматриваться как «создание сеанса»; выход из системы как «уничтожение сеанса». Этот подход требует некоторого привыкания, но как только вы примете это мышление, он поможет поддерживать ваши интерфейсы согласованными и предсказуемыми другими разработчиками. Приложения Rails, как правило, вращаются вокруг моделей, которые управляют сохранностью данных.

  • Он использует Bundler в качестве инструмента управления зависимостями, используя возможности сообщества Rubygems. Это обеспечивает согласованный подход для добавления сторонних функций в приложение с явным форматом, в котором указывается, какие библиотеки нам нужны и какие версии, включая разрешение вложенных зависимостей.

  • Он может поддерживать широкий спектр баз данных, с SQLite по умолчанию (хорошо для разработки) и MysQL и PostgreSQL в качестве первого выбора для производства. MongoDB также может быть интегрирован с минимальными усилиями.

  • Соглашение означает, что наименования, пути и шаблоны обычно предсказуемы и совместно используются коллегами-разработчиками Rails. Это обеспечивает более легкую кривую обучения, ориентированную на бизнес-логику приложения, упрощенное обслуживание и меньшее количество документации.

  • Его легко протестировать с помощью инструментов, которые интегрируются с платформой для модульного тестирования и интеграции (с поддержкой JavaScript). Кроме того, само сообщество Ruby настоятельно рекомендует разработку , основанную на тестировании , поэтому хороший разработчик Rails, скорее всего, достаточно опытен в тестировании.

  • Приложение Rails может быть легко развернуто в облачных инфраструктурах, таких как Heroku , или непосредственно на частных серверах (например, оно отлично работает на Ubuntu Linux).

Вот краткое изложение того, что Rails может делать из коробки, а также некоторые примеры кода. Обратите внимание: даже если вы никогда раньше не работали с Rails или даже не знаете Ruby, это не должно помешать вам понять их, так как они вполне читабельны.

  • Поддержка определения модели данных посредством миграций, т.е. повторяемых и обратимых не зависящих от базы данных инструкций, которые манипулируют структурой базы данных. Рассмотрим следующую миграцию:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    class CreateEvents < ActiveRecord::Migration
      def change
        create_table :events do |t|
          t.string :title
          t.date :start_date
          t.date :end_date
          t.boolean :live, :default => false
          t.timestamps
        end
      end
    end

    Эта миграция создает таблицу events с некоторыми базовыми данными, такими как title , и использует конкретные типы данных, которые сопоставляются с конкретными типами столбцов в базовой базе данных. Например, по умолчанию string использует столбец VARCHAR(255) , если используется MySQL. Эта миграция может быть написана вручную с нуля или сгенерирована из командной строки, а затем отредактирована перед запуском.

  • Интерфейс независимой от базы данных модели для действий CRUD. Вот несколько примеров для модели News :

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    news = News.new(title: ‘Sample news’)
    # => returns a news instance, not saved to the database
    news.save
    # => runs an insert query and updates the instance with the returned id from the database
    news.title = ‘Updated sample news’
    # => sets the title to the new value, without saving to the database
    news.save
    # => runs an update query for that item
    news.destroy
    # => runs a delete query for that item

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

    1
    2
    News.where(published: true).order(‘created_at DESC’).limit(5)
    # => produces ‘SELECT * from news where published = 1 order by created_at DESC limit 5’
  • Поддержка валидаций; Модель Event всегда может требовать наличия уникального заголовка. В этом случае можно четко выразить эти требования в классе Event :

    1
    2
    3
    4
    5
    class Event < ActiveRecord::Base
     
      validates :title, :presence => true, :uniqueness => true
     
    end

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

  • Сеанс и куки с простыми помощниками для установки значений, их получения и удаления, с прозрачной подписью.

  • Защита от подделки форм, так что любая форма, которую вы генерируете через Rails, автоматически подписывается токеном, который гарантирует ее подлинность.

  • Политика агрессивной защиты XSS включена по умолчанию, поэтому любой используемый вами элемент формы защищен по умолчанию, если только вы явно не внесете его в белый список (при этом соблюдайте осторожность!).

  • Простое управление данными GET и POST , доступное через простой хеш, доступный в каждом действии контроллера.

  • Простые привязки для подключения контроллеров, моделей и представлений с четкими и общепринятыми правилами, которые упрощают управление файлами и кодом. Например, рассмотрим следующий контроллер, который отвечает за отображение страницы списка новостей по адресу http://example.com/news :

    1
    2
    3
    4
    5
    6
    7
    class NewsController < ApplicationController
     
        def index
     
        end
     
    end

    Даже без написания какого-либо кода для определения того, что делает index , Rails предоставляет поведение по умолчанию, которое заключается в отображении представления app/views/news/index.html.erb . Это уменьшает потребность в шаблонном коде, поскольку в большинстве случаев просто необходимо переопределить поведение, если оно нестандартно.

  • Интеграция с внешними сервисами; Rails предлагает богатую экосистему приложений, которые вы можете использовать для мониторинга, обслуживания и улучшения вашего приложения (некоторые из них работают и с другими платформами). Новая Relic помогает в мониторинге производительности, Airbrake Bug Tracker собирает исключения для уведомления команды разработчиков, Code Climate анализирует вашу кодовую базу на качество, сложность и дублирование, Tddium и TravisCI могут удаленно запускать ваш набор тестов для разных версий Ruby.

  • Как отмечалось ранее, Rails также предлагает интегрированную среду для работы с Coffeescript и Sass, с прозрачной компиляцией в процессе разработки и предварительной обработки и очисткой кэша для развертывания, так что ваше производственное приложение будет обслуживать отдельные минимизированные файлы с подписью в имени файла. Таким образом, вы можете быть абсолютно уверены, что любой браузер всегда будет загружать и кэшировать последнюю версию файла.


Задумывались ли вы, почему Rails является первым выбором для многих веб-стартапов? Есть две основные причины:

  • Это позволяет вам работать с функциями с минимальным количеством шаблонов, удаляя большую часть не связанной с бизнесом работы из процесса разработки. Это приводит к увеличению скорости разработки и развертывания новых функций, что является ключом к пониманию, является ли продукт надежным.

  • Структура рельсов позволяет легко приспосабливаться к изменениям. Это, безусловно, верно для многих сред MVC, хотя Rails особенно хорош в реструктуризации потока ваших приложений, простом повторном использовании компонентов.

Важно помнить, что зачастую время разработки обходится дороже, чем дополнительный сервер.

Всегда идет разговор о производительности Rails и о том, как она может стать узким местом, когда вы получаете тысячи ударов в минуту. Проблема в том, что для достижения этого уровня трафика требуются огромные усилия. Правда в том, что в 9 случаях из 10 масштабируемость является проблемой, с которой многим компаниям никогда не приходится сталкиваться. Для них гораздо важнее возможность вносить изменения, простота обслуживания и предсказуемость.

Кроме того, важно помнить, что зачастую время разработки обходится дороже, чем дополнительный сервер. Платформа, подобная Rails, часто является предпочтительной, потому что, даже если ей может потребоваться более мощное оборудование, она все еще экономически выгодна в других областях.

Это не означает, что вам не нужно заботиться о производительности вашего кода или беспокоиться о таких темах, как кеширование и оптимизация запросов. Вместо этого это означает учет всего спектра аппаратных и программных изменений, которые вы можете сделать; иногда целесообразно отложить часть работы, ориентированную на производительность, и временно иметь более мощное оборудование для продолжения работы над важными функциями.


Rails можно легко расширить с помощью широкого спектра внешних библиотек, распространяемых через Rubygems . В большинстве случаев любая функция, которую вам нужно создать, уже предлагается через гем. Теперь это не означает, что добавление драгоценных камней является идеальным решением; каждая сторонняя зависимость, которую вы добавляете в приложение, становится фактором риска.

Иногда лучше накатить собственную версию с пользовательским кодом.

Тем не менее, вы не должны изобретать велосипед. Многие приложения Rails используют одни и те же гемы для предоставления определенных функций; это можно рассматривать как преимущество. Помните: широкое использование означает широкое тестирование, поэтому считается безопасным использование некоторых известных драгоценных камней для выполнения ключевых задач. Вот несколько примеров:

  • Разработать , для регистрации пользователей, входа в систему и управления
  • Простая форма , для простой и настраиваемой генерации разметки форм
  • Каминари , для нумерации страниц
  • ActiveAdmin , для быстрых страниц администратора

Этот список можно легко продолжить, но суть в том, что Rails использует модульность подхода, основанного на Rubygems, и может значительно ускорить разработку, сосредоточив внимание на создании функций, имеющих значение для продукта, над которым вы работаете, вместо стандартного.


Я могу сосредоточиться на том, что важно для клиентов, не ставя под угрозу хорошее качество кода.

Примерно два года назад я работал в роли менеджера по маркетингу и управлению продуктами (хобби занимался веб-разработкой); это означало сосредоточиться на особенностях продукта, их стоимости для бизнеса и стоимости, связанной с их разработкой. Когда я решил сменить профессию, Rails 3.0 только что был выпущен. Я провел день, просматривая видео и читая учебники. Я быстро решил, что Rails — это то, на чем я хотел сосредоточить свои усилия.

Причина — и это несколько пересекается с тем, что мы уже обсуждали — в том, что я вижу практический подход в фреймворке, четкую цель быть продуктивным и сосредоточиться на продукте и его разработке. Я мог бы сделать все за короткое время. После нескольких месяцев интенсивного самообучения через различные веб-учебники и некоторые примеры приложений я подал заявку на свою текущую работу в качестве разработчика Rails в New Bamboo.

Мне нравится работать с Rails каждый день, потому что я могу сосредоточиться на том, что важно для клиентов, не ставя под угрозу хорошее качество кода. Для меня это идеальная отправная точка для большинства веб-приложений.

Он не решает всех проблем, с которыми вы столкнетесь при создании больших веб-приложений. Бывают случаи, когда вы ясно видите, что Rails не подходит для определенного вида услуг, но пришло время разделить архитектуру на более мелкие приложения.


Rails — это мощная среда, которая может помочь вам стать более продуктивным и уверенным в работе над сложными проектами. Это возможно благодаря его строгим соглашениям и твердой структуре. Крупные компании, такие как 37 Signals, Pivotal Labs, Groupon (или даже Twitter в старые времена), выбрали Rails в качестве базовой архитектуры для своих основных приложений. Есть причина почему!

Готовы начать ездить на Ruby on Rails ?