[RUBY] Construction de l'environnement du serveur API Rails à l'aide de docker-compose

A propos de l'auteur

J'ai suivi les cours Ruby et Rails de Progate. Après cela, j'ai créé un environnement avec Docker et un serveur API avec Rails.

À propos de cet article

Chez Progate, j'ai appris à écrire des rails, y compris des vues, mais je voulais utiliser Rails uniquement comme serveur API. Aussi, comme je voulais développer avec docker, j'ai créé un environnement de développement Rails en me référant au [Quick Start] officiel (https://docs.docker.com/compose/rails/). Résumez le savoir-faire acquis au cours du processus.

J'écrirai sur Gem utilisé dans le développement de serveur API dans un autre article.

supposition

Comprendre comment utiliser Docker et docker-compose

environnement

Ruby 2.7 MySQL 5.7 VSCode Mac 10.14.5 Pour afficher la base de données Sequel Pro

Jusqu'à Rails nouveau

Commencez par créer un dossier de projet. Ici, il s'agit de rails-sample. Et créez un Dockerfile directement sous ce

FROM ruby:2.7

RUN apt-get update -qq && apt-get install -y
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/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"]

Ensuite, préparez un Gemfile pour installer les rails

source 'https://rubygems.org'
gem 'rails', '~>5'

Créez un Gemfile.lock vide

touch Gemfile.lock

Créez ʻentrypoint.sh` décrit dans le Dockerfile

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 "$@"

Voir Démarrage rapide officiel de Docker pour savoir pourquoi ces fichiers sont créés.

Créez docker-compose.yml

docker-compose.yml


version: '3'
services:
  server:
    build: .
    tty: true
    volumes:
      - .:/myapp
    working_dir: /myapp
    ports:
      - "3000:3000"
    depends_on:
      - mysql
    command: bash
    # command: > 
    #   bash -c "rm -f tmp/pids/server.pid &&
    #       bundle exec rails s -p 3000 -b '0.0.0.0'"
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mysql
    volumes:
      - "./mysql/db-data/:/var/lib/mysql" #Persistance des données
      - "./mysql/my.cnf:/etc/mysql/conf.d/my.cnf" #Nécessaire pour utiliser le japonais comme données

Pour la persistance des données MySQL et le support japonais

Créez un dossier rails-sample> mysql> db-data. Créez my.cnf dans le dossier mysql

my.cnf


[mysqld]
character-set-server=utf8

Jusqu'à présent, c'est la configuration. スクリーンショット 2020-09-26 20.12.16.png

Si vous pouvez faire cela, faites rails new.

docker-compose run server rails new . -MC --force --api --database=mysql --skip-active-storage

Recherchez les options dans la commande rails et commandez help et omettez celles dont vous ne pensez pas avoir besoin. Les options importantes sont:

--force //Écraser les fichiers sur les rails nouveau
--api //Ne générez pas de vues inutiles pour le développement d'API
--database=myql //Sqlite par défaut, mais spécifiez mysql

Vous pouvez faire diverses choses avec cela.

スクリーンショット 2020-09-26 20.23.52.png

Donc, ici, «Gemfile» et «Gemfile.lock» sont écrasés et nouveaux. Afin de refléter cela dans l'image

docker-compose build

Il y a un besoin de.

Si vous connaissez à l'avance la gemme dont vous avez besoin, écrivez-la dans le Gemfile ici.

Ceci complète les rails nouveaux

Écrivez un fichier de configuration pour vous connecter à mysql.

config > database.yml

database.yml


default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: mysql

development:
  <<: *default
  host: mysql
  database: myapp_development

...
test:
  <<: *default
  host: mysql
  database: myapp_test

Je n'avais pas besoin de production, alors je l'ai commenté. Le nom d'hôte est le nom de service de docker-compose.yml le mot de passe est également spécifié dans docker-compose.yml

Si vous le pouvez, démarrez le conteneur avec docker-compose up -d et allez à l'intérieur avec Attach Shell de VS Code.

rails db:create

Créer un DB avec

root@dc075120af8a:/myapp# rails db:create
...
Created database 'myapp_development'
Created database 'myapp_test'

Vous avez maintenant une base de données. Si vous vous connectez à Sequel Pro, vous pouvez confirmer que la base de données est créée

Après cela, comme vous l'avez appris dans Progate, vous pouvez créer une table en créant un modèle et en migrant.

référence

Docker Official Quick Start English Veuillez noter que le contenu est ancien pour les Japonais.

Application dédiée à l'API Rails Guide Rails

Recommended Posts

Construction de l'environnement du serveur API Rails à l'aide de docker-compose
Construction de l'environnement Rails Docker
Construction de l'environnement de développement Django à l'aide de Docker-compose (mémorandum personnel)
Construction de l'environnement de développement Rails6 [Mac]
Ingénieur Rails Environnement Construction Ruby2.7.1
Construction de l'environnement des rails Rails5.2.1 ruby2.5.1 Catalina
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
Rails5 + MySQL8.0 + Construction d'environnement de volumes de premier niveau avec docker-compose
[Docker] Construction de l'environnement Rails 5.2 avec docker
[Rails / MySQL] Construction de l'environnement Mac
[Rails 6] Développement d'API à l'aide de GraphQL (Query)
Mémo de construction de l'environnement Ruby on Rails 6.0
Rails sur la procédure de construction de l'environnement Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Flux de construction de l’environnement Rails problématiques [Windows 10]
[Rails] Construction de l'environnement d'instance AWS EC2
API Rails
Rails 6 (mode API) + création d'environnement MySQL Docker par docker-compose (pour Mac)
Visualisez le temps de traitement du serveur Rails à l'aide de la synchronisation du serveur
Construction d'environnement de rails avec Docker (apocalypse personnelle)
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Rails & React & Webpacker & Manuel de construction de l'environnement MySQL
Muscle Ruby on Rails Jour 1 ~ Construction de l'environnement ~
Construction de l'environnement CentOS8.2 (x86_64) + ruby2.5 + Rails5.2 + MariaDB (10.3.17)
[Rails API x Docker] Construction facile de l'environnement avec contrôle de la coque et du fonctionnement avec Flutter
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 1 Construction de l'environnement
Préparez un environnement de développement Nuxt (web) + Laravel (API) dans le même référentiel à l'aide de docker-compose
Comment lier Rails6 Vue (à partir de la construction de l'environnement)
Procédure de construction d'environnement pour l'utilisation de PowerMock avec JUnit
[Java] Construction de l'environnement
Créer un environnement Kaggle à l'aide de Docker officiel et de vscode
Création d'un environnement de développement à l'aide d'IntelliJ IDEA + Maven + Tomcat 9
[Note personnelle] Construction de l'environnement Ruby on Rails (Windows)
Essayez de déployer l'application Rails sur EC2-Part 2 (Server Construction) -
[Note] Construction de l'environnement Struts2 à l'aide de Gradle dans Eclipse
Une erreur de serveur interne 500 se produit dans l'environnement de production Rails
Construction du serveur NFS
[Printemps] Construction de l'environnement
[Rails] Nginx, déploiement de l'environnement Puma et étude du serveur [AWS EC2]
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
[Construction de l'environnement Mac] Ruby on Rails (+ Webpacker gère les erreurs)
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Utilisation de l'API PAY.JP avec Rails ~ Enregistrement de la carte ~ (payjp.js v2)
Construction d'un environnement d'analyse de données avec Docker (mémorandum personnel)
Construction de l'environnement Penronse [Windows]
[Flutter] Construction de l'environnement Ubuntu 20.04
Procédure de construction du serveur Serveur Ubuntu18.04