Взгляните на то, что мы недавно рассмотрели на сессиях по обмену знаниями в нашей команде Ruby on Rails. Это подборка наших последних бирж на Monorepos, WebSockets, Rails 7 и Sidekiq.

командой Whitespectre Rails

Что вы найдете в этой статье:

  • Что такое сеансы X-Rails
  • Реализация соединений WebSocket с помощью Rails
  • Использование Sidekiq для повышения производительности
  • Идти в ногу с Rails 7
  • Оптимизация рабочего процесса с помощью монорепозитория

Делиться своими знаниями — основная часть ДНК Whitespectre. Один из основных способов сделать это в компании — это различные сессии по обмену знаниями. Они варьируются от сессий с открытыми темами, таких как общекорпоративные выступления «Коричневой сумки», до более конкретных групповых встреч, построенных вокруг платформы или технологии, такой как React, React Native, Blockchain, UI/UX продукта, интерфейс и, конечно, Ruby on Rails.

Как объясняет Ник Тюдор, генеральный директор компании, «мы твердо верим, что наши технические возможности усиливаются за счет обмена знаниями и опытом между нашими проектами и членами команды. Наши межкомандные (X-team) сессии — это структурированная, но неформальная возможность поговорить с коллегами-инженерами, поделиться тем, что мы делаем, поучиться у других и обсудить различные подходы. Эти сессии помогают создать «мозговое доверие» Whitespectre, что делает нас коллективно умнее и эффективнее в создании программного обеспечения».

Сессии X-Rails

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

Рафал Ямроз (Rafał Jamróz), старший член группы Rails, объясняет, что « цель состоит в том, чтобы убедиться, что люди из разных команд с одинаковым набором навыков встречаются вместе и обсуждают интересные новые дополнения к своим инструментам/фреймворкам или как они решили задачу в своем проекте. Эти встречи вызвали множество интересных дискуссий и позволили людям открыть для себя интересные идеи, инструменты и решения, над которыми работают их коллеги в разных проектах».

Ниже приведены лишь некоторые из тем, которыми недавно поделились старшие члены команды X-Rails: Диого Роса, Рикардо Лейтао, Рафал Ямроз, Марк Камара и Константин Неперученко.

Реализация соединений WebSocket с помощью Rails

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

Медицинской платформе Idion требовалось специальное программное обеспечение для интеграции системы электронных медицинских карт больниц с облачной платформой. Это позволит использовать настраиваемые щиты; для печати по прибытии пациента. Диого объяснил, как они реконструировали сервер печати на основе WebSocket и построили решение с использованием Rails.

В этом конкретном принтере на серверной части использовалась устаревшая технология (JAVA с Tomcat), которую можно было улучшить с помощью JAVA SDK. С технической точки зрения было сложно поддерживать два приложения с разными и устаревшими SDK. Таким образом, решение состояло в том, чтобы перепроектировать протокол WebSockets принтера и создать сервер rails для связи с ним, что упростило обертывание этого как службы API. Цель состояла в том, чтобы сразу же использовать библиотеки Rails WebSockets вместо кабеля действия, понять, как они работают, и заставить их функционировать в соответствии с требованиями WebSockets для конкретных принтеров.

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

Рикардо поделился шагами своей команды по подключению приложения к ошейнику на основе Bluetooth, GPS и сотовых технологий. Скорость и надежность потока данных были необходимы, поскольку приложению приходилось обрабатывать виртуальные заборы площадью от ½ акра до более 1000 акров, а также отслеживать и отслеживать поведение собак. Команде, разработавшей приложение, удалось добиться этого с помощью комбинации активных соединений WebSocket, активных кабелей, чтобы упростить работу с технической стороны, и сотовой связи, чтобы поддерживать живое соединение с ошейником.

Использование Sidekiq для повышения производительности

Фиолетовая морковь — это платформа, которая произвела революцию в сфере продуктовых наборов с миссией сделать растительную пищу интересной и доступной для подписчиков на наборы для еды.

Когда перед его командой была поставлена ​​задача обработки значительных объемов данных и создания подробных отчетов по запросу, Рафал Джамроз и его команда снова обратились к Sidekiq. Рафал объяснил во время сеанса X-Rails, что это широко используемый инструмент для фоновой обработки в мире Ruby. Тем не менее, именно возможности пакетной обработки сделали его идеальным для этой работы, в основном из-за его выдающейся производительности.

Sidekiq Batch (требуется Sidekiq Pro, но есть бесплатная альтернатива с открытым исходным кодом) использовался для разделения заданий с большим объемом данных, обрабатываемых в несколько потоков, а обратные вызовы использовались для объединения результатов и последующей очистки. Обратные вызовы также можно использовать для действий при сбоях, отправляя уведомление (в нашем случае Slack).

Проекту также требовался работник другого типа для передачи информации о заказах сторонним службам (также с использованием пакетов). В этом случае они использовали сервис ShipUp для отслеживания поставок и уведомления клиентов о доставке коробки или о задержках доставки. У этого сервиса было ограничение на скорость API, поэтому они не могли отправлять более 120 запросов в минуту. В данном случае решением было использовать задание с самопереназначением на основе гема redis_rate_limiter.

Идти в ногу с Rails 7

Быть в курсе последних выпусков в мире Ruby является ключом к здоровью всех проектов, и Марк недавно рассказал о некоторых очень полезных драгоценных камнях, которые поставляются с Rails 7, которые в некоторых случаях продвигаются как новый стандарт для использования. с приложениями Rails 7.

С помощью Import Maps вместо того, чтобы получать все файлы javascript и компилировать их в один огромный файл js, вы можете полагаться на http2 для получения всех пакетов в разных запросах. Преимущество этого заключается в том, что его легче кэшировать и легче увидеть, где что-то пошло не так.

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

Kredis — это жемчужина, которая делает использование Redis проще, чем когда-либо, читая и записывая его, как если бы это был огромный хеш, живущий в приложении. Он также содержит помощники для ActiveModel, которые могут пригодиться во многих случаях.

Наконец, Марк представил Hotwire, стимул Turbo +, который использует только Ruby для упрощения написания динамических страниц.

Оптимизация рабочего процесса с помощью монорепозитория

Константин и Диого рассказали, как они превратили громоздкий рабочий процесс крупного SaaS в безупречный опыт, перейдя от подхода Multirepo к подходу Monorepo.

При рассмотрении SaaS они рассмотрели различные варианты разработки решения Ruby on Rails, которое можно было бы настроить для каждого клиента, но при этом использовать общие функции через библиотеки.

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

Они объяснили, как все изменилось в CI/CD, организации папок и процессе GIT. Однако это было не самым большим делом. Переломным моментом в повседневной работе разработчиков стала серия скриптов, которые они создали для запуска нескольких жизненно важных функций. Подробнее об этом подходе вы можете прочитать в этой статье.

Не забудьте поставить 👏🏻, если вам нравится читать наши статьи!

И подпишитесь, чтобы первыми узнать, о чем мы говорим 💡