Начало проекта на Ruby on Rails — это время на развёртывание: установка нужной версии, гемов и их зависимостей, а также различных баз данных. Иногда процесс идёт не идеально, и приходится тратить время на поиск решения в Stackoverflow. Чтобы упростить жизнь, можно использовать инструмент для контейнеризации проекта со всем его окружением. Это позволит автоматизировать развёртывание и добавит бонусов вашему резюме.
В качестве полнофункциональной среды разработки мы будем использовать Docker-контейнеры и Visual Studio Code. По тому, как установить и пользоваться Docker есть масса статей и видео, поэтому этот увлекательный путь вы без труда пройдёте сами. А вот для Visual Studio Code нам потребуется установить специальное приложение Remote-Containers plugin, которое позволит работать внутри контейнера и использовать весь набор функций.
Шаг первый: завернуть весь проект с помощью Docker и Docker-Compose. Создать докер файл легко: вам достаточно нажать в VS Code F1, выбрать Docker: Add Docker Files to Workspace и следовать подсказкам. Также можно создать Dockerfile в корневой папке. Пример файла для Ruby on Rails приложения:
# syntax=docker/dockerfile:1
FROM ruby:3.0.2
RUN apt-get update -qq && apt-get install -y nodejs
# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1
WORKDIR /workspace
COPY Gemfile /workspace/Gemfile
COPY Gemfile.lock /workspace/Gemfile.lock
RUN bundle install
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Далее создаем файл со скриптами entrypoint.sh, который так же добавим в корневую папку:
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
Чтобы магия сработала, создадим docker-compose.yml:
После этого устанавливаем Remote-Containers plugin в VS Code — плагин позволит работать внутри контейнера. Затем создаем файл конфигурации: F1 >> Remote-Containers: Add Development Container Configuration Files
В папке .devcontainer вы найдете файл devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.187.0/containers/docker-existing-docker-compose
// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
{
"name": "Existing Docker Compose (Extend)",
// Update the 'dockerComposeFile' list if you have more compose files or use different names.
// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
"dockerComposeFile": [
"../docker-compose.yml",
"docker-compose.yml"
],
// The 'service' property is the name of the service for the container that VS Code should
// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
"service": "web",
// The optional 'workspaceFolder' property is the path VS Code should open by default when
// connected. This is typically a file mount in .devcontainer/docker-compose.yml
"workspaceFolder": "/workspace",
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": []
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Uncomment the next line if you want start specific services in your Docker Compose config.
// "runServices": [],
// Uncomment the next line if you want to keep your containers running after VS Code shuts down.
// "shutdownAction": "none",
// Uncomment the next line to run commands after the container is created - for example installing curl.
// "postCreateCommand": "apt-get update && apt-get install -y curl",
// Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}
Внесём новые настройки и уберем лишние комментарии. Добавим все сервисы из docker-compose.yml в "runServices": ["workspace", "db", "redis"], чтобы запустить их на старте.
Для того, чтобы VS Code останавливал контейнеры, когда окно закроется, добавим строчку "shutdownAction": "stopCompose", а также добавим список портов внутрь контейнера, которые будут доступны локально "forwardPorts": [3000]
Теперь подготовим базу для нашего приложения и запустим в терминале: docker-compose run workspace rake db:create. Запускаем F1 >> Remote-Containers: Rebuild and Reopen in Container и с помощью команды в терминале rails s открываем готовое приложение.
После запуска, вам понадобятся все плагины, которыми вы пользуетесь в ежедневной работе. Их легко перенести в среду разработки нажав на кнопку, указанную на скриншоте:
Поздравляю! Теперь не нужно устанавливать никакие зависимости и лишние библиотеки — вы работаете внутри контейнера.
На платформе доступны новые инструменты, ускоряющие разработку, реализован чат в GigaCode, а пользоваться GitVerse теперь может малый и средний бизнес.