# Ruby on Rails

### Установка Ruby

Edgegap предлагает весьма интуитивную платформу для размещения бессерверных веб-приложений где угодно. В этом руководстве мы пройдем шаги по развёртыванию Ruby on Rails. Прежде чем продолжать, убедитесь, что у вас установлен Ruby.

Если вы используете Linux/UNIX, вы можете воспользоваться предустановленным пакетным менеджером и установить Ruby через терминал. Вы можете обратиться к [официальной документации Ruby](https://www.ruby-lang.org/en/documentation/installation/) чтобы найти точную команду, соответствующую вашей дистрибуции Linux/UNIX.

На Windows вам нужно будет [скачать RubyInstaller](https://rubyinstaller.org) чтобы получить Ruby.

В конце установки вы можете проверить правильность установки Ruby с помощью следующей команды:

```
ruby -v
```

Теперь, когда Ruby установлен, очевидно, нужно установить Rails. Это довольно просто и делается одной командой:

```
gem install rails
```

Вы можете легко подтвердить корректную установку Rails аналогичным способом, как мы проверяли установку Ruby.

```
rails -v
```

### Требования

Чтобы следовать этому руководству, вам понадобятся следующие вещи помимо Ruby и Ruby on Rails:

* [Docker Desktop](https://www.docker.com/get-started/)
* [Учётная запись на Edgegap](https://app.edgegap.com/auth/login)
* Доступ к [частному репозиторию контейнеров Edgegap](https://docs.edgegap.com/ru/learn/advanced-features/edgegap-container-registry) или к другому реестру, такому как [реестр контейнеров Docker](https://hub.docker.com/)

### Начало работы с Ruby on Rails

Чтобы начать работу с Ruby on Rails, вам нужно создать папку для нового проекта и выполнить в ней следующую команду:

```
rails new edgegap-ruby-rails-demo
```

После завершения процесса установки вам нужно будет изменить файл routes.rb, который находится в папке config. Ваш файл маршрутов должен содержать следующее:

```ruby
Rails.application.routes.draw do
  root 'hello_world#index'
end
```

Вы можете заметить, что в проекте в папке views нет страницы «hello\_world». Вы можете легко сгенерировать её с соответствующим контроллером. Сначала убедитесь, что вы находитесь в папке, которую создал Rails, когда вы запускали `rails new` команду.

Если вы используете дистрибутив Linux, выполните следующую команду, чтобы создать контроллер HelloWorld:

```
rails generate controller HelloWorld index --skip-routes
```

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

В Windows вам придётся добавить некоторые ключевые слова в команду следующим образом:

```
ruby bin/rails generate controller HelloWorld index –skip-routes
```

После успешного выполнения команды вы увидите страницу HelloWorld в папке views. Возможно, вам потребуется исправить синтаксис HTML, чтобы получить корректный раздел перед развёртыванием. Файл должен выглядеть так:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-203bfc13bd043df0ca5bbc9cd9e267e456e53a9e%2Fruby-index-page.png?alt=media" alt=""><figcaption></figcaption></figure>

Единственный шаг, оставшийся для завершения проекта — запустить ваше приложение Ruby on Rails локально. Опять же, команда для этого отличается в Linux и Windows следующим образом:

Linux:

```sh
rails server
```

Windows:

```sh
ruby bin/rails server
```

### Контейнеризация вашего приложения

Контейнеризация большинства приложений достаточно проста. Необходимо создать Dockerfile и затем запустить его в Docker для создания образа. Visual Studio Code — хорошая среда для создания Dockerfile, поскольку по умолчанию он не добавляет расширение к каждому новому файлу. Это именно то, что нам нужно. Просто создайте новый файл и назовите его Dockerfile. Рядом с ним появится маленький логотип Docker. Теперь вы можете скопировать и вставить этот скрипт в файл, чтобы получить основные зависимости. Образ, который создаст этот Dockerfile, будет примерно 700 МБ. Разумеется, вы можете его оптимизировать, но контейнер такого размера будет работать очень плавно на Edgegap:

```dockerfile
FROM ruby:3-alpine
WORKDIR /app
COPY . .
RUN apk add --no-cache build-base tzdata nodejs yarn sqlite-dev postgresql-dev mysql-dev
RUN gem install bundler
RUN bundle install
ENV RAILS_ENV=production
RUN bundle exec rails assets:precompile
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
```

После сохранения Dockerfile пора создавать образ. Вы можете сделать это, выполнив следующую команду:

{% hint style="warning" %}
Для пользователей с ARM CPU (Mac M1, M2 и т. п.) добавьте `--platform linux/amd64`  опцию к вашей команде сборки.
{% endhint %}

```sh
docker build -t registry.edgegap.com/<YOUR_REPO>/ruby-rails-demo:<YOUR_VERSION_NUMBER> .
```

Предпочтительно указывать номер версии в соответствии с семантическим версионированием, но если вы не планируете обновлять сборку на Edgegap после первого развёртывания, можно опустить номер версии. Но прежде чем это сделать, необходимо отправить созданный вами Docker-образ в выбранный репозиторий образов. Помните, что мы предлагаем приватные репозитории через Edgegap Registry, которые дают вам ряд преимуществ в области безопасности, которых может не быть при использовании стандартного Docker-реестра. Чтобы отправить образ в наш репозиторий, сначала нужно войти с вашими учетными данными, используя эту команду:

```sh
docker login registry.edgegap.com
```

Теперь остается только запушить образ следующим образом:

```sh
docker push registry.edgegap.com/<YOUR_REPO>/ruby-rails-demo:<YOUR_VERSION_NUMBER>
```

Отлично! Теперь вы всего в одном шаге от развёртывания вашего Nuxt-приложения на платформе Edgegap.

### Развёртывание вашего приложения на Edgegap

Существует два способа развернуть приложение на Edgegap. Для обоих вам нужна учётная запись, которую можно создать бесплатно по ссылке прямо здесь. Сначала рассмотрим, как развернуть контейнеризированное приложение через наш веб-сайт.

#### Развёртывание приложения через панель управления Edgegap

Вам нужно перейти на [веб-сайт платформы Edgegap](https://console.edgegap.com/) и ввести ваши учетные данные. После этого вы будете автоматически перенаправлены на вашу панель управления. Если вы только что создали аккаунт, вы увидите опцию запустить первое приложение сразу. В противном случае просто перейдите на вкладку «Applications & Games» в меню слева на экране. Справа вы увидите опцию создания нового приложения:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-fc4b2486acb434863c2a6fd0e3772e02bfd2e214%2Fcreate-app-nuxt-js.png?alt=media" alt=""><figcaption></figcaption></figure>

После нажатия появится следующая форма:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-488e9bf3f56918ab3e01c15c9364a8fe321a40b5%2Fapp-form-nuxt-js.png?alt=media" alt=""><figcaption></figcaption></figure>

Заполните все обязательные поля, и после этого есть несколько параметров по умолчанию, которые нужно изменить:

* Номер порта: этому приложению требуется открытый порт 3000, поэтому добавьте его в раздел «ports» формы создания. Снимите галочку с опции проверки порта.

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

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-810022e4ed498eed59c957e369b76261513c0daa%2Fruby-deployment-edgegap.png?alt=media" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-b407d8a535e2c875804fc36d55999d68b2c82121%2Fruby-deployment-edgegap-2.png?alt=media" alt=""><figcaption></figcaption></figure>

Это откроет новую вкладку, где вы найдете страницу по умолчанию вашего Nuxt-приложения.

#### Развёртывание приложения через API Edgegap

Хотя наша веб-панель является самым удобным способом развертывания приложения, вы также можете сделать это через простой API-запрос. Для этого можно использовать Postman. Важно посетить панель управления, чтобы [создать API-токен](https://docs.edgegap.com/ru/docs/sample-projects/broken-reference) через опции в вашем профиле.

После того как у вас появится API-токен, останется только сформулировать запрос на развертывание с именем приложения, его версией, IP-адресами, регионом, в котором вы хотите выполнить развертывание, и, конечно, вашим токеном в параметрах авторизации. Пример полного запроса можно посмотреть в нашей документации здесь.

После отправки запроса вы увидите ответ в командной строке или в Postman, который будет выглядеть примерно так:

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-902356a5acce346433cb04f870f205cc4f161e2d%2Fruby-deployment-api.png?alt=media" alt=""><figcaption></figcaption></figure>

Это всё, что нужно, чтобы развернуть приложение через CLI. Чтобы подтвердить, что приложение развернуто, вы можете снова перейти на панель управления и увидеть активное развертывание, перейдя на вкладку «Active deployments».
