Rails 5 уже не за горами (в настоящее время нацелена на осень 2015 года), и появятся некоторые интересные функции. Если вы работаете в магазине Rails, вам необходимо подготовить свои приложения к этому основному выпуску.
Не беспокойся Как всегда, мы в Sitepoint проведем вас через весь процесс миграции, когда приближается дата выпуска. А пока давайте узнаем, что будет дальше и как это улучшит ваш процесс разработки.
Основные улучшения
Есть несколько удивительных анонсов, которые в корне изменит то, как мы работаем с Rails. Новые функции, такие как Action Cable и улучшенные Turbolinks, могут мгновенно улучшить наш рабочий процесс веб-разработки. Давайте рассмотрим каждый из них подробно.
Слияние Rails API
За последние несколько лет, благодаря Backbone.js и Angular.JS, количество одностраничных приложений (SPA) растет. Последние несколько проектов, которые я построил, были чисто SPA, и использование Rails для этих случаев было излишним. Я пытался побаловаться с Sinatra и даже с чистыми приложениями Rack, но в итоге написал слишком много подписчиков. Маршрутизация отсутствовала по сравнению с Rails, и было слишком много уязвимостей безопасности, с которыми мне пришлось столкнуться. Мне нужно было либо написать его поверх драгоценных камней rails-api, управляемых сообществом, либо жить с традиционными Rails.
В Rails 5 гем rails-api будет объединен с ядром, что позволит использовать Rails в качестве простого JSON API. Лично я считаю это отличным дополнением. Мне не нужно смотреть дальше при создании API для моих клиентов приложений javascript (и других).
Ruby 2.2.1
Ruby 2.2 был отличным дополнением к сообществу Ruby. Это не только принесло огромный прирост производительности в Ruby, но и представило множество новых функций . Кроме того, сбор мусора символов широко отмечался. Легенда гласит, что Драконы Валерии обрушили лепестки роз на Седьмое Королевство, когда было сделано это объявление. OK! Может быть, я зашел слишком далеко, но вы получите общую картину.
ПРИМЕЧАНИЕ . Перед переходом на Rails 5 необходимо убедиться, что ваше приложение работает на Ruby 2.2.1.
Благодаря этим улучшениям, Ruby 2.2+ был подходящим кандидатом на Rails 5. Rails 5 будет работать только на Ruby 2.2.1 и выше.
Турболинкс 3
Традиционные веб-приложения, как правило, работают медленно из-за полной перезагрузки страницы. Один из способов решить эту проблему — просто перезагрузить минимальную область содержимого. Turbolinks решают эту проблему, просто перезагружая содержимое тела с сервера, а не обновляя всю страницу. Хотя это в некоторой степени улучшает производительность, это также относительно медленно. Turbolinks 3 стремится решить эту проблему.
Tubolinks 3 позволяет вам сохранить большую часть вашей страницы и выборочно обновлять определенные регионы с помощью частичных. Это очень похоже на работу SPA, и вы можете сделать все это с сервера. Звучит отлично, правда?
Это отличная особенность, поскольку стадо движется к одностраничным приложениям. Однако на первый взгляд кажется, что вам придется управлять частями вручную. Это означает, что вам нужно будет помнить, какую часть приложения необходимо перезагрузить в определенный момент. Для меня это добавляет много беспорядка в мой код и позволяет легко облажаться. Лично я предпочитаю использовать что-то вроде React, которое очень хорошо справляется с Virtual DOM.
Примечание : React работает так, что поддерживает Virtual DOM, где происходят все манипуляции. Затем он сравнивает Virtual DOM и фактическую DOM и вносит только необходимые изменения. Это гарантирует, что DOM поражен только тогда, когда это абсолютно необходимо, а изменения минимальны.
Сказав это, для людей, которые не любят вмешиваться в JS, это предлагает мгновенное повышение производительности.
Кабель действий
Многие проекты в наши дни используют WebSockets для отправки клиенту обновлений в реальном времени. Хотя большинство клиентских браузеров уже начали это поддерживать, нам все еще нужен надежный клиент на сервере для управления подписчиками и надлежащей отправки сигнала обновления. Эта функция доступна из некоторых новых платформ, таких как Phoenix для Erlang. Однако сообществу Rails пришлось прибегнуть к сторонним реализациям, таким как Pushr, чтобы это работало.
Примечание . Для непосвященных WebSockets — это стандарт W3C, который открывает дуплексное соединение с вашего браузера. Серверы могут общаться (т. Е. Отправлять обновления) клиентам по мере необходимости и асинхронно обновлять состояние клиента без полной перезагрузки страницы. Например, именно так Gmail загружает новые электронные письма без перезагрузки всей страницы.
Rails традиционно предлагает все инструменты, необходимые для создания отличного приложения из коробки. Это одна из причин, почему он так популярен, особенно среди стартап-сообщества. Отсутствие поддержки WebSocket стало причиной большого недовольства в сообществе. Похоже, что основная команда Rails приняла это к сведению и предложила Action Cable. Нам придется подождать некоторое время, чтобы увидеть, как это будет работать в реальной жизни, но, тем не менее, это здорово.
Некоторые тонкости
Грабли внутри рельсов
Для многих нубов Rails необходимость разбираться в том, когда использовать rake
rails
Теперь вам не нужно переключать контекст между командами rake
rails
Вы можете запустить все задачи Rake с ключевым словом rails
Например,
rake db:migrate
теперь станет:
rails db:migrate
На первый взгляд это может показаться не так много, но это значительно упростит жизнь начинающим. Rails 5 также добавит команду restart
Активные изменения записи
Одним из изменений, которое почти осталось незамеченным, было обновление на belongs_to
Когда вы создавали отношение « belongs_to
Это приводит к большому количеству несоответствий данных. С Rails 5 он родительский стал обязательным. Если вы попытаетесь вставить пустую запись здесь, Active Record вырвет.
Изменения в тестах контроллеров
Если вы тестируете то, что ваш шаблон отображает в вашем контроллере, вы делаете это неправильно. Простое изменение шаблона приведет вас к бессонным ночам, выслеживающим преступника. Вот почему в Rails 5 assert_template
Однако вы можете продолжить использовать assert_select
Если вы тестировали переменные экземпляра в методе контроллера, вы должны заметить, что assigns
Если вы пишете тесты контроллеров, новый указ гласит, что вас должны интересовать файлы cookie, код возврата HTTP и вызовы БД, если таковые имеются. Подождите, это звучит так же, как интеграционный тест. Что ж, вы меня поняли … тесты контроллеров, скорее всего, будут отменены в пользу интеграционных тестов в будущем.
Примечание: * Оформить тестирование Rails Dom для получения более подробной информации и рекомендаций.
Завершение
Сегодня, когда javascript играет доминирующую роль в веб-разработке, веб-фреймворки превращаются в простые API-сервисы. Основная команда Rails осознает это и движется в правильном направлении. Не стесняйтесь присоединиться к нам в разделе комментариев для обсуждения.