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.
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.
Comprendre comment utiliser Docker et docker-compose
Ruby 2.7 MySQL 5.7 VSCode Mac 10.14.5 Pour afficher la base de données Sequel Pro
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.
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.
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
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.
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