Главная » Ruby » Что нового в Rails 5
Rails 5

23.07.2015 by Devjournal

Что нового в Rails 5

Rails 5 уже не за горами (ориентировочная дата выхода — осень 2015), и нас ожидают новые захватывающие особенности. Если у вас уже есть приложения на Rails, то вам необходимо подготовить их к этому крупному релизу.

Не беспокойтесь, Dev Journal будет направлять вам на всем пути перехода. А сейчас давайте посмотрим, что же нас ждет, и как это может улучшить наш процесс разработки.

Основные изменения Rails 5

Несколько удивительных улучшений должны принципиально изменить нашу работу с Rails. Давайте подробнее рассмотрим некоторые нововведения, такие как Action Cable и усовершенствованный Turbolinks, которые, несомненно, способны улучшить нашу среду веб-разработки.

Объединение Rails API

На протяжении последних лет, благодаря Backbone.js и Angular.JS, число одностраничных сайтов (Single Page Applications (SPAs)) на подъеме. Последние несколько проектов, которые я разрабатывал, были построены на чистейшем SPA, использование Rails в данном случае было излишним. Я пробовал использовать Sinatra и даже чистые Rack приложения, но кончилось все написанием слишком большого количества шаблонов. Простой роутинг проигрывал в сравнении с Rails, и возникало слишком много уязвимостей, с которыми мне предстояло справиться. Я был вынужден либо писать на поддерживаемом сообществом gem rails-api, либо смириться с традиционным Rails.

В Rails 5 гем rails-api включен в ядро, что позволяет использовать Rails как простой JSON API. Мне кажется, это великолепное дополнение. Мне не придется больше искать другие пути при построении API для моего javascript (или иного) клиентского приложения.

Ruby 2.2.1

Ruby 2.2 — величайшее дополнение в Ruby сообществе. Он привнес не только большой прирост производительности в Ruby, но также ввел множество новых функций. К тому же, был широко отмечен сборщик мусора. Легенда гласит, что драконы Валерии посыпали лепестки роз на Седьмое королевство, когда он был анонсирован. ОК! Может быть я отклонился от темы, но вы поняли основную мысль.

Заметка: Перед тем, как перейти на Rails 5, нам необходимо удостовериться, что наше приложение работает на Ruby 2.2.1.

В связи с этими изменениями, Ruby 2.2+ — зрелый вариант для Rails 5. Rails 5 будет работать только на Ruby 2.2.1 и выше.

Turbolinks 3

Традиционные веб-приложения имеют тенденцию к медлительности из-за перезагрузки страницы при исполнении запроса. Одним из вариантов была перезагрузка минимального контента на странице. Turbolinks решает эту проблему с контентом, загружая только тело контента с сервера во время обновления страницы. Хотя это и повышает в некоторой степени производительность, но все еще работает сравнительно медленно. Turbolinks 3 создан, чтобы решить эту задачу.

Turbolinks 3 позволяет нам сохранить большую часть наших страниц и выборочно обновлять определенные части страницы через паршиалы. Это очень похоже на принцип работы SPA приложений, и мы можем все это делать с сервера. Звучит круто, правда?

Это большой шаг в сторону одностраничных сайтов. Как бы то ни было, на первый взгляд похоже, что мы можем управлять паршиалами вручную. Это значит, что нам нужно помнить, какая часть нашего приложения перезагружается в определенный момент. Я считаю, что это добавляет беспорядочности в мой код и дает возможность легко его испортить. Лично я склонен использовать что-то вроде ReactJS, который хорошо справляется с виртуальным DOM.

Заметка: Принцип работы ReactJS — создание виртуального DOM, где и происходят все наши манипуляции. Происходит разделение виртуального и активного DOM и только необходимые изменения.

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

Action Cable

Все больше проектов на сегодняшний день используют WebSocket для живого уведомления клиентов. Пока многие браузеры только начинают поддерживать их, и мы нуждаемся в надежном клиенте на сервере для управления подписчиками и отправками push_оповещений. Эта особенность доступна из коробки в некоторых фреймворках, таких как Phoenix для Erlang. Сообщество Rails прибегло к сторонней реализации, Pushr, для того, чтобы заставить это заработать.

Заметка: WebSocket’ы — это стандарт W3C, который открывает дуплексное подключение к вашему браузеру. Сервер может сказать (отправить обновление) клиенту по мере необходимости через асинхронное обновление, без обновления всей страницы. Например, так работает Gmail, загружая новое письмо без перезагрузки всей страницы.

Rails традиционно предлагает все необходимые инструменты для разработки нашего приложения из коробки. Это еще одна причина, почему он так популярен среди сообщества стартапов. Отсутствие поддержки вебсокетов — еще одна причина недовольства среди сообщества. Похоже, что команада Rails взяла это на заметку и добавила ее с помощью Action Cable. Нам только остается ждать того момента, когда мы сможем посмотреть на работу в реальной жизни.

Некоторые тонкости Rails 5

Rake внутри Rails

Для многих новичков Rails выяснение, когда использовать rake и когда использовать rails, — источник для сомнений. Теперь вам не придется выбирать между rake и rails командами. Можно запускать все Rake задачи, используя команду Rails. Например:

rake db:migrate

теперь будет:

rails db:migrate

Также в Rails 5 Добавлена команда restart, которая быстро перезапустит приложение.

Изменения в Active Record

Одно изменения осталось почти незамеченным — это обновление belongs_to. Когда вы создавали класс Student, обладающий свойством belongs_to, становилось возможным создать студента без ассоциации классовых отношений. Это создавало неразбериху и путаницу. С Rails 5 создание родительского класса становится обязательным.

Изменения в тестировании контроллеров

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

Больше вам не придется тестировать инстансные перменные внутри методов контроллера.

Если вы пишете тесты контроллеров, теперь вам придется учитывать куки, возврат кода HTTP и  запросы БД. Звучит как интеграционный тест. И правда, тесты контроллеров, вероятно, будут в будущем исключены в пользу интеграционных тестов.

Подводя итоги

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

#Rails 5#Ruby#Ruby on Rails

Comments

  1. Макс
    27.07.2015 - 08:52

    Спасибо за подробное описание обновлений. Теперь понимаю, что ruby on rails мой выбор на ближайшие года. Жду новых статей.

  2. Марат
    08.09.2015 - 11:43

    Приветствую. А можно ли на руби писать сайты? Есть ли CMS на руби?

    • Devjournal
      08.09.2015 - 12:04

      Можно. На канале есть фреймворки, на которых можно это делать. CMS есть и достаточно много. Если будет необходимо могу сделать ознакомительное видео или статью.

  3. Марат
    09.09.2015 - 17:34

    Сделайте тогда подписку на сайте и начните уже выкладывать уроки по Ruby 🙂

    • Devjournal
      13.09.2015 - 09:48

      Спасибо за отклик. Подписку сделаем. Уроки по Руби? Начиная с азов?

  4. Марат
    18.09.2015 - 23:07

    Да, желательно с азов. Лично меня, возможно, как и многих, интересует как можно использовать руби в веб строительстве.

  5. Михаил Алексеевич Поспелов
    26.02.2016 - 01:28

    Здравствуйте. Здесь опечатка небольшая фреймворк Phoenix все таки для Elixir-а а не для Erlang-а.

Добавить комментарий

Your email address will not be published / Required fields are marked *