На 16 марта запланирован релиз Rails 5.0, самое время разобраться, что же нового и вкусного будет в новой версии рельсов (кроме нового логотипа и дизайна их официального сайта, я имею в виду).
image

Изначально релиз Rails 5.0 был запланирован на весну 2015 года и много раз сдвигался, последний раз с 23 февраля на 16 марта 2016. То есть, возможно, это не последний перенос сроков. Тем не менее, Rails 5.0 на сегодня имеет статус beta3 и работает на продакшене Basecamp

Сначала формальные изменения

  • Поддерживается только ruby 2.2.2+
  • Веб-сервер Webrick заменен на Puma на 16 потоков по умолчанию
  • Все rake команды заменены на rails, например: rails db:migrate

И большие куски функционала

Turbolinks 5

Текущая версия turbolinks обновляет содержимое всей страницы через ajax без повторного обращения к статическим файлам css,js и т.д. Новая же версия позволяет выборочно изменять содержимое отдельных частей веб-страницы (через partials), причем делать это можно по инициативе сервера.

Action Cable

Наконец-то реализована поддержка Websockets, теперь можно делать полноценные single page application без танцев с бубном. Каналы, подписчики к ним на стороне клиента и так далее. Очень удобно.

Прекрасный видео туториал об использовании Action Cable – веб чат на Rails без обновления страницы.

API режим

Теперь есть возможность сделать приложение без HTML и JS частей по умолчанию – существенно быстрее и легче.
rails new backend --api

Создается приложение, которое сразу cконфигурировано для работы с JSON, а не HTML

Sprockets 4

Добавлен файл app/assets/config/manifest.js для управления прекомпиляцией статических файлов.
// JS and CSS bundles
//
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css

// Images and fonts so that views can link to them
//
//= link_tree ../fonts
//= link_tree ../images

Еще обсуждается его конечно расположение и формат (js или yml), с финальным релизом будет понятно.

Немного сахара

Его на самом деле много, как много и мелких изменений, но мне приглянулись вот эти несколько:
  • params в контроллере больше не хэш, а объект
  • Теперь можно писать вот так: User.where(users[:name].eq(‘bob’).or(users[:age].lt(25)))
  • Мелкие методы Integer#positive? и Integer#negative?
  • объекты с отношением belongs_to теперь по умолчанию должны иметь родителя, иначе будет exception


Результат

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

Установка последней beta

git clone --depth 1 http://github.com/rails/rails
cd rails
bundle
railties/exe/rails new --edge appname
cd appname
bundle
bundle exec rails s


Почитать

http://blog.michelada.io/whats-new-in-rails-5
https://medium.com/evil-martians/the-rails-5-post-9c76dbac8fc#.9p0fpry5o
Самый новый видео подкаст об изменениях (с примерами)

Комментарии (9)


  1. printercu
    10.03.2016 19:19
    +3

    Что-то, похоже, релиз 16-го отменяется. Обещали RC1 1-го марта, но его нет.


  1. Gambala
    10.03.2016 19:49
    +5

    Новая же версия позволяет выборочно изменять содержимое отдельных частей веб-страницы

    Turbolinks 3 отныне — deprecated, доступна здесь: https://github.com/turbolinks/turbolinks-classic

    Официальная версия — Turbolinks 5, без partial-апдейтинга: https://github.com/turbolinks/turbolinks


    1. k2m30
      11.03.2016 12:05
      +1

      Turbolinks 5, конечно.


  1. HomoLuden
    10.03.2016 21:33
    +1

    Упоминули про API режим, но не упоминули про CORS, а этот вопрос автоматически встает для режима API.

    Теперь gem CORS стал частью Rails.


    1. printercu
      10.03.2016 22:11
      +1

      Вроде бы ничего такого нет, просто предлагают поставить гем для режима апи: https://github.com/rails/rails/search?utf8=%E2%9C%93&q=cors


  1. Fedcomp
    11.03.2016 11:35
    +1

    объекты с отношением belongs_to теперь по умолчанию должны иметь родителя, иначе будет exception
    Вот это очень спорное решение. Интересно has_many будет также работать?


    1. printercu
      11.03.2016 14:59

      Всё не так. Никаких эксепшенов, обычные ошибки валидации (конечно, если не бэнг-методы). Просто по-умолчанию required: true, да и можно поменять это значение с Rails.application.config.active_record.belongs_to_required_by_default.
      https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/builder/belongs_to.rb#L126-L136


      1. k2m30
        11.03.2016 15:15

        Еще проще, если нужно в каком-то отдельном случае.

        class Book < ActiveRecord::Base
           belongs_to :author, optional: true
        end


        1. Fedcomp
          14.03.2016 13:22

          О, спасибо вам большое. Хорошо что оставили такую возможность.