[RUBY] [Première construction d'environnement] J'ai essayé de créer un environnement Rails6 + MySQL8.0 + Docker sur Windows 10.

introduction

J'ai essayé de créer un environnement Rails6 et Docker, je vais donc le laisser ici en tant que mémorandum. Qiita Ceci est mon premier message, et comme je suis débutant, je pense qu'il y a plusieurs points qui ne peuvent pas être atteints, donc j'apprécierais que vous puissiez signaler des erreurs.

environnement

référence Créer un environnement Rails6 + MySQL avec docker-compose [Construction de l'environnement des rails] Construction de l'environnement avec docker + rails + mysql (même les débutants peuvent terminer en 30 minutes!) [ENTRYPOINT est "toujours exécuter", CMD est "(par défaut) argument"](https://pocketstudio.net/2020/01 / 31 / cmd-et-point d'entrée /)

Elle a été réalisée en référence à cela.

objectif

Créez l'environnement et affichez l'écran d'accueil de Rails.

1. Installez Docker pour Windows

https://hub.docker.com/ Accédez à et installez.

2. Ecrire un Dockerfile

$ mkdir ~/Desktop/docker-tutrial/Rails_app
$ cd  ~/Desktop/docker-tutrial/Rails_app
$ code Dockerfile

Ouvrez un terminal, créez un répertoire à n'importe quel endroit et écrivez `` Dockerfile '' comme suit. (J'utilise vsCode.)

$nom de fichier de code

Ensuite, vsCode démarrera et vous pourrez écrire un nouveau fichier. (VsCode doit être installé sur votre PC à l'avance.)

FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs yarnpkg
RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

# 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

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

3. Description de Gemfile

source 'https://rubygems.org'
gem 'rails', '~>6'
$ touch Gemfile.lock

Écrivez l'initiale Gemfile '' et le vide Gemfile.lock ''.

Quatre. Description de entrypoint.sh

Entrypoint défini comme ENTRYPOINT dans Dockerfile.Décrivez sh.



```shell

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

Cinq. Description de docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0
    volumes:
      - ./tmp/db:/var/lib/mysql
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=1
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db

MySQL utilise la version 8.0

En définissant ** MYSQL_ALLOW_EMPTY_PASSWORD **, vous pouvez vous connecter en tant que root même si le mot de passe est vide.

6. Do Rails nouvelle construction et doocker-compose.

$ docker-compose run web bundle exec rails new . --force --database=mysql

Remplacez le fichier existant par ** --force ** et spécifiez MySQL avec ** --database **. Maintenant que vous disposez de l'ensemble de fichiers Rails habituel, créez-le.

$ docker-compose build

7. Modifiez le nom d'hôte de la base de données et effectuez la composition de docker.

Puisque vous ne pouvez pas vous connecter à la base de données telle quelle Remplacez ** host ** dans ** config / database.yml ** par ** db **.


default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  host: db
development:
  <<: *default
  database: app_development
test:
  <<: *default
  database: app_test

** db ** est le nom du conteneur.

Une fois cela fait, compilez à nouveau et faites ** docker-compose up **. Si vous accédez à Rails avec ** localhost: 3000 **, vous obtiendrez ** ActiveRecord :: NoDatabaseError **.

Cela se produit car le conteneur Web ne prend pas en charge la ** méthode d'authentification caching_sha2_password ** de mysql 8.0. Suivez les étapes ci-dessous pour passer à l'ancienne méthode d'authentification ** mysql_native_password **.

8. Changement de méthode d'authentification MySQL

Tout d'abord, entrez dans le conteneur DB et démarrez bash.

$ docker-compose exec db bash

Puis connectez-vous avec la commande mysql.


# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.18 MySQL Community Server - GPL

...

Vous pouvez voir la liste des utilisateurs et sa méthode d'authentification en envoyant la requête suivante.


mysql> select User,Host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

Remplacez ** caching_sha2_password ** dans le plugin le plus à droite par ** mysql_native_password **. Utilisez ** ALTER USER ** pour modifier les paramètres utilisateur cible ** root @% **.


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '';
-- Query OK, 0 rows affected (0.02 sec)

Après le changement

mysql> select User,Host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

9. Accédez à l'écran d'accueil de Rails.

Si vous faites ** db: prepare ** et créez une base de données, vous pourrez accéder à l'écran d'accueil de Rails. Rails.png

Recommended Posts

[Première construction d'environnement] J'ai essayé de créer un environnement Rails6 + MySQL8.0 + Docker sur Windows 10.
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
J'ai essayé de créer un React.js x TypeScript x Material-UI sur un environnement docker
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
Rails sur la procédure de construction de l'environnement Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Construire un environnement Rails 6 + MySQL avec Docker compose
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
[Construction de l'environnement Rails & Docker & MySQL] J'ai démarré le conteneur, mais je ne trouve pas MySQL ...?
01. J'ai essayé de créer un environnement avec SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10)
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
J'ai essayé de migrer le portfolio créé sur Vagrant vers l'environnement de développement de Docker
J'ai essayé de créer une application de clonage LINE
[Note personnelle] Construction de l'environnement Ruby on Rails (Windows)
Construction de l'environnement Rails Docker
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
Quand j'ai essayé de créer un environnement pour PHP7.4 + Apache + MySQL avec Docker, je suis resté bloqué [Windows & Mac]
J'ai essayé de créer un portefeuille avec AWS, Docker, CircleCI, Laravel [avec lien de référence]
Créez un environnement de développement pour créer des applications Ruby on Jets + React avec Docker
[Introduction] Créer une application Ruby on Rails
J'ai essayé de créer une compétence Clova en Java
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Rails6 J'ai essayé d'introduire Docker dans une application existante
[Ruby on Rails] De la construction de MySQL au changement de base de données
J'ai essayé node-jt400 (Construction de l'environnement)
Mémo de construction de l'environnement MySQL 5.7 (Docker)
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
[Docker] Construction de l'environnement Rails 5.2 avec docker
[Rails / MySQL] Construction de l'environnement Mac
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
J'ai essayé d'ajouter une ligne de séparation à TabLayout sur Android
Difficultés à créer un environnement Ruby on Rails (Windows 10) (SQLite3)
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
J'ai essayé de construire l'environnement petit à petit en utilisant docker
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode