7 min read

Как выпустить startup в открытое плавание и не дать ему утонуть

Работа над проектами – обыденное дело для каждого разработчика. Многие из нас работают над проектами, которые давным давно находятся на рынке и просто плавно продолжают свое развитие. Некоторые работают над стартапами, у которых первого релиза еще не было. Постараемся разобраться в том, благодаря чему rails new app можно вывести в реальный мир.Для этого рассмотрим перечень инструментов, позволяющих повысить качество разработки, поддерживать работоспособность и упростить ее процесс.

1. Трекер ошибок. Для трекинга ошибок мы используем sentry. Этот инструмент позволяет отслеживать ошибки как на стороне сервера, так и клиента. Можно настроить нотификацию в Slack и другие мессенджеры. Также позволяет вести контроль решения возникающих проблем и назначать для этого членов команды.

2. Heroku tools. Важно настроить процесс разработки таким образом, чтобы любой новый или измененный функционал
проходил обязательную проверку работоспособности. Для этого Heroku позволяет создавать review App, связанные с текущими
PR в git (GitHub/GitLab ect.). Настройка достаточно подробно описана в документации Heroku. Необходимо создать app.json
файл с указанием всех необходимых переменных окружения, скриптов и используемых приложений Heroku.

3. Heroku add-ons. Их существует огромное множество для всевозможных целей (для управления БД, отправки email, отслеживания метрик на сервере и т.д). Рассмотрим два из них:

3.1 Для более удобного отслеживания логов мы используем Papertrail. Он предоставляет удобный листинг логов,
возможность поиска, построения графиков. Интерфейс позволяет разделить отображение actions/errors, что значительно упрощает работу.

3.2 Для отслеживания производительности приложения используется инструмент Scout APM. Он постоянно
отслеживает запросы к базе данных (N + 1), источники переполнения памяти, отклонения производительности и многое
другое. Позволяет строить графики производительности, отслеживать ситуацию в динамике.

4. Концепция непрерывной интеграции и доставки (CI/CD) — основа наших тестирований. CI/CD — концепция,
которая реализуется как конвейер, облегчая слияние только что закоммиченного кода в основную базу кода.

Концепция позволяет запускать различные типы тестов на каждом этапе (выполнение интеграционного аспекта) и завершать его запуском с развертыванием закоммиченного кода в фактический продукт, который видят конечные пользователи (выполнение доставки).

В качестве инструмента мы использовали CircleCi. У него есть поддержка ruby, относительно простая интеграция с git и описание необходимого набора тестов. Для описания сценария проверки кода необходимо создать .circleci/config.yml

Для запуска тестового сценария создаются docker images, описанные в файле конфигурации. Для большей надежности в
настройках GitHub можно задать условие, при котором merge текущего PR-a невозможен при падении тестов.

5. Линтеры. Они необходимы для проверки корректности кода и отсутствия конфликтов в нем. Существую линтеры для проверки back-end кода, js-кода, стилей. Для проверки корректности стилей мы используем Stylelint. Принцип работы достаточно прост и понятен - проверяет имеющиеся файлы стилей на соответствие синтаксиса, правильной вложенности стилей и.т.д. Аналогично и для проверки .js файлов используется ESLint. Проверка осуществляется на корректность синтаксиса, структуры кода, использование переменных (неиспользуемые переменные). Проверяет отсутствие забытых debugger-ов. Для проверки ruby-кода используем всем известный Rubocop

6.   Полезные гемы.  Для поддержания кода в чистоте и порядке полезно использовать Prettier, который используется для проверки и улучшения формата кода.  Brakeman используется как security scanner и позволяет улавливать узкие места в безопасности приложения. Bullet - устанавливается для development env. Позволяет выявлять проблемы в запросах: N+1, лишнюю загрузку данных и т.д. Информирует о проблемах с помощью pop-up при загрузке страницы. Также для проверки и поддержания актуальных версий установленных гемов можно использовать гем Bundler-audit.

7. Тесты - неотъемлемая часть любого приложения. Тестами покрывается как логика серверной части, так и js. Для покрытия логики серверной части мы используем традиционную связку rspec + capybara, которая позволяет достаточно быстро и интуитивно понятно описать правильную логику работы  приложения. Для покрытия клиентской части используем Jest. Его синтаксис также довольно простой и интуитивно понятный, что значительно ускоряет процесс написания тестов.

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

Tell us about your ideas!




Thanks for your message

The message was sended successfully! Our manager will contact you as soon as possible.

OK