Перейти к содержимому

Гайд по деплою · Ruby on Rails

Разверните Ruby on Rails за считанные минуты.

Подключите репозиторий, Railpack соберёт его, сервис получит домен с TLS. Базы данных из шаблонов, потребление списывается поминутно с предоплаченного баланса, всё на нодах в ЕС.

terminal
$ npm i -g skiffly && skiffly login
$ cd my-rails-app && skiffly init
$ skiffly deploy --template postgres
$ skiffly variables set 'DATABASE_URL=${{Postgres.DATABASE_URL}}' RAILS_ENV=production
$ skiffly up

Что распознаёт Railpack

Railpack изучает репозиторий и подбирает сборку для Ruby on Rails; большинству проектов настройка не нужна. Dockerfile в репозитории всегда имеет приоритет.

  • Gemfile with rails
  • config.ru
  • .ruby-version
Сборщик
Railpack (по умолчанию)
Команда запуска
bundle exec rails db:prepare && bundle exec rails server -b 0.0.0.0 -p $PORT

Определяется Railpack; переопределите её в Настройки → Деплой → Команда запуска.

Порт и $PORT

Skiffly прокидывает PORT в каждый сервис и направляет на него публичный домен. Укажите порт в настройках сервиса, если приложение слушает фиксированный; по умолчанию для Ruby on Rails это 3000, а если ничего не задано — 8080.

Слушать $PORT
bundle exec rails server -b 0.0.0.0 -p $PORT
PORT
3000
SKIFFLY_PUBLIC_DOMAIN
<service>.skiffly.cloud

Из терминала

Установите CLI, привяжите директорию, разверните. skiffly up собирает запушенный HEAD текущей ветки и стримит логи сборки; skiffly domain выдаёт сервису адрес *.skiffly.cloud.

Или опишите один раз

.skiffly/skiffly.ts объявляет сервис, его базы данных и ссылки между ними. skiffly config plan показывает diff, skiffly config apply применяет его. API повторяет railway/iac.

Config as code
.skiffly/skiffly.ts
// .skiffly/skiffly.ts
import { defineSkiffly, generate, github, postgres, project, service } from "@skiffly/config";

export default defineSkiffly(() => {
  const db = postgres("db");

  const web = service("web", {
    source: github("acme/web"),
    start: "bundle exec rails db:prepare && bundle exec rails server -b 0.0.0.0 -p $PORT",
    port: 3000,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
      RAILS_ENV: "production",
      SECRET_KEY_BASE: generate("hex64"),
    },
  });

  return project("web", { resources: [web, db] });
});

Ruby on Rails на Skiffly: частые вопросы

Как задать переменные окружения для Ruby on Rails?
На вкладке «Переменные» сервиса, командой skiffly variables set KEY=value или в .skiffly/skiffly.ts. Ссылайтесь на другие сервисы через ${{Postgres.DATABASE_URL}}, а на общие значения окружения — через ${{shared.NAME}}. Секреты шифруются при хранении.
Можно ли изменить команду сборки или запуска?
Да. Настройки → Сборка → Команда сборки переопределяет шаг сборки Railpack; Настройки → Деплой → Команда запуска заменяет команду запуска. Для монорепозитория задаётся корневая директория, чтобы сборка шла внутри неё.
Как добавить Postgres или Redis?
Разверните шаблон в то же окружение. Он появится с томом, сгенерированными учётными данными и URL подключения, на который вы ссылаетесь из сервиса Ruby on Rails. Подключайтесь с ноутбука через skiffly connect postgres.
Будут ли preview-окружения для каждого pull request?
Включите PR-превью в проекте: каждый pull request получит собственную копию окружения на своём домене, которая удаляется, когда PR слит или закрыт. Форки игнорируются.
Сколько стоит небольшое приложение на Ruby on Rails?
Сервис 512 МБ / 0.25 vCPU обходится примерно в $7.75 в месяц, списание поминутно с баланса. Добавьте Postgres с 512 МБ / 0.25 vCPU и томом 10 ГБ примерно за $9 сверху. Бесплатный тариф запускает один сервис 512 МБ с App Sleeping без оплаты.
Может ли сервис Ruby on Rails засыпать при простое?
Включите App Sleeping: примерно через 10 минут без запросов сервис масштабируется до нуля и просыпается на следующем запросе (2–10 с). CPU и память во сне не тарифицируются; том — тарифицируется.

Разверните своё приложение на Ruby on Rails сегодня

Бесплатный тариф без карты. Hobby от $5, из них $5 потребления включено.