Красный яхонт

06 мая 2022
Красный яхонт

Так на Руси называли рубин, считавшийся одним из наиболее ценных камней. Он присутствовал во многих артефактах и знаковых реликвиях древности. Мы не так сильны в истории, зато знаем всё про Ruby-разработку и делимся с вами самыми интересными материалами. Приступим!

GraphQL без N+1

ORM отличная технология, позволяющая скрестить ежа с ужом, а именно базы данных и методологию ООП. Выступая в роли переводчика, она позволяет разработчикам не думать о проектировании БД, а мыслить привычными информационными объектами. ORM — это абстракция, которая имеет не только преимущества, но и недостатки. Характерная проблема — повышенная нагрузка на базу данных из-за лишних SQL-запросов.

Давайте задумаемся — ORM ведь всё равно исполняет традиционные SQL-запросы. В его обязанности не входит какая-либо оптимизация. Часто основной запрос формируется с дополнительными SQL-запросами, хотя данные можно было бы извлечь из основного. Эту проблему как раз и называют «проблемой выбора Ν+1», обсуждение которой на StackOverFlow появилось аж 13 лет назад.

На Хабре была опубликована статья, демонстрирующая простое решение этой проблемы, в том числе и для GraphQL. Два инструмента N1Loader и ArLazyPreload, используемые вместе, волшебным образом убирают Ν+1. Работает с ActiveRecord (версии 5, 6 и 7) или полностью автономно.

Минус две уязвимости в Rails

Атаки с использованием межсайтового скриптинга XSS считаются одними из самых опасных. Пару таких уязвимостей, CVE-2022-22577 и CVS-2022-27777  закрыли в последнем обновлении. Единовременно вышли версии 7.0.2.4, 6.1.5.1, 6.0.4.8 и 5.2.7.1. 

Первая проблема заключалась в том, что заголовки Content-Security-Policy не прикреплялись к API-запросам. Уязвимость затрагивала все версии Rails выше 5.2.0. Это делало возможным проведение XSS-атаки. 

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

Make Jekyll great again

На Ruby написано множество крутых проектов (в том числе за это мы его и любим). На Ruby написан и Bridgetown, генератор сайтов и full-stack фреймворк, первый релиз которого был представлен чуть более месяца назад. Он начинался как форк одного из старейших генераторов статических сайтов — Jekyll. Идея проекта в том, чтобы максимальное количество возможностей работало «из коробки». Внутри Bridgetown есть:

  • генератор статических сайтов,
  • движок CMS,
  • шаблонизаторы (Liquid / ERB / Serbea),
  • full-stack фреймворк (Roda),
  • сборщики (esbuild и PostCSS).

Напоминает походный рюкзак в котором собрано всё необходимое, что кстати упомянуто в их философии. Этот набор поможет разработчикам сосредоточиться на проекте, а не тратить время на выбор инструментов. Станет ли Bridgetown новой звездой Jamstack? Время покажет.

Рубиновый VSCode

Выбор редактора кода всегда остаётся личным предпочтением разработчика. Кому-то по душе VIM с его кроссплатформенностью, свободой автоматизации и почти 3000 расширений. Кому-то хочется использовать специализированные коммерческие IDE, такие как RubyMine. Достаточно универсальным вариантом остаётся Visual Studio Code. Для Ruby-разработчика его возможности можно расширить за счет Ruby Solargraph.

Расширение представляет из себя языковой сервер с механизмами умного автодополнения и показа документации. Ruby Solargraph поддерживает ядро языка, стандартную библиотеку и умеет автодополнять код гемов, включенных через require. Конфигурация проекта задается в .solargraph.yml, сгенерировать который можно командой solargraph config . Поставляемая в комплекте документация может быть актуализирована соответствующими командами.

Если бы существовал идеальный редактор, все бы им пользовались, а мы бы тут ничего не писали. Конечно же, тут не без недостатков. Rails пока что поддерживается только частично. По словам разработчиков в Rails много «магии», затрудняющей статический анализ и мешающий реализовать полную поддержку. Но работы ведутся (держим кулачки), например, есть вот такой плагин.

 

Видео с Ruby meetup №17

Мы продолжаем помогать разработчикам обмениваться опытом не вставая с любимого кресла. Наш коллега Никита Ратников рассказал как вместо привычного технического задания заказчики приносят свою идею в виде прототипа Figma. Станислав Герман из Gett Systems RU поделился секретами управления техническим долгом и инструментами, которые для этого используются. В заключение Григорий Окин из Level.Travel поведал как подружить старый монолит на рельсах с новым сервисом на Go.

 

 

 

 

 

 

Митапы

Онлайн

Ruby meetup №18

 19:00

Рады сообщить, что у нас запланирован Ruby Meetup, который пройдёт 20 июля. Все доклады будут традиционно предзаписаны в студийном качестве 4К, а вести доклад и помогать вам допрашивать спикеров в прямом эфире будет Григорий Петров, Ruby-разработчик и организатор RubyRussia. Детальная информация о мероприятии будет опубликована позже, следите за нашими новостями.

Регистрация

Вакансии

Удаленка / Офис

Evrone 


Мы открыты для новых Ruby-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах и выступления на конференциях, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.