Je suis en train de créer un portfolio. Puisque j'ai trébuché immédiatement dans la première construction de l'environnement, je vais l'écrire en incluant le sens du mémorandum. Je serais heureux s'il est livré aux débutants qui ont trébuché au même endroit.
$ docker-compose up
, cette erreur ...Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
① Installez MySQL localement ②bundle install ③ Confirmez que Gemfile.lock est créé
La cause première était que je polluais mon environnement lorsque j'installais MySQL localement. Il y a un problème avec le socket et les permissions, et il semble que "bundle install" n'ait pas bien tiré MySQL.
Par conséquent, supprimez tous les répertoires MySQL et réinstallez MySQL localement. Après cela, il se présente sous la forme de "bundle install".
Gemfile.lock ne fonctionnait pas bien, donc docker-compose up
n'a pas extrait mysql.
Au fait, le gemfile.lock n'a pas été créé par bundle install
. (Pleurs)
rails × docker dit qu'un tel état local peut affecter. J'ai beaucoup appris.
Le Dockerfile et le docker-compose.yml ressemblent à ceci.
Dockerfile
#Utiliser Ruby
FROM ruby:2.6.6
#Code de caractère UTF-Définir sur 8
ENV LANG C.UTF-8
#Définir le fuseau horaire sur le Japon
ENV TZ Asia/Tokyo
#Créez un répertoire d'application directement sous la racine
RUN mkdir /app
#Dans le répertoire de travail/Déplacer en spécifiant l'application
WORKDIR /app
#Partager l'hôte Gemfile
COPY Gemfile /app/Gemfile
#Installer divers packages
#libpq:Requis pour déployer MySQL avec Gem
#sudo:Gestion des modifications des autorisations
#bundler(Mécanisme pour installer le package décrit dans Gemfile)Installer
RUN apt-get update -qq && apt-get install -y build-essential \
libpq-dev \
sudo \
&& gem install bundler:2.0.1
#Installez les packages répertoriés dans le Gemfile
#Rails 6 dans Gemfile.0.3'Est listé
RUN bundle install
#/Partager le répertoire actuel avec l'application
COPY . /app
(C'est difficile à voir car c'est plein de commentaires ...)
docker-compose.yml
version: "3"
#Créer des conteneurs de base de données et de backend
services:
db:
container_name: db
#Extraire l'image téléchargée sur Docker Hub
image: mysql:latest
#Paramètres des variables d'environnement
environment:
TZ: Asia/Tokyo #Définir TimeZone ainsi que Dockerfile
MYSQL_DATABASE: linpy_database #Définir le nom de la base de données
MYSQL_ROOT_PASSWORD: ***** #Définir le mot de passe de l'utilisateur root
MYSQL_USER: ***** #Définir l'utilisateur
MYSQL_PASSWORD: ***** #Définissez le mot de passe utilisateur ci-dessus
#Spécifiez le chemin du fichier de configuration à monter
volumes:
- mysql_data:/var/lib/mysql
#Définir le port
ports:
- 3307:3306
#Définir l'adresse IP
networks:
app_net: #App ci-dessous_Configuré pour utiliser les adresses IP suivantes dans l'espace réseau net
ipv4_address: '172.20.0.2'
backend:
container_name: backend
#Exécutez ComposeFile et spécifiez le chemin lorsqu'il est construit
build: ./backend/
image: backend
#Exécutez gem pour démarrer le serveur, 0.0.0.Lier à 0 pour un accès complet
command: bundle exec rails server -b 0.0.0.0
#Démarrez toujours le conteneur
tty: true
#Lancer l'exécution du menu fixe de l'interface d'entrée-synonyme de ça
stdin_open: true
#Le backend est le cache, temp, log,Monter sur git
volumes:
- ./backend:/app:cached
- bundle_data:/usr/local/bundle:cached
- /app/vendor
- /app/tmp
- /app/log
- /app/.git
environment:
TZ: Asia/Tokyo
#Contrôle de l'ordre de démarrage,Après db
depends_on:
- db
ports:
- 5000:3000 #Port avant
networks:
app_net:
ipv4_address: '172.20.0.3'
#Configurez votre propre réseau
networks:
#app_Définissez un espace réseau appelé net
app_net:
driver: bridge #pont Se connecter au réseau
ipam: #Paramètres IP
driver: default
config:
- subnet: 172.20.0.0/24 #Définir le sous-réseau
#Définissez deux volumes
volumes:
mysql_data:
bundle_data:
Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.6.6'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.0.3'
# Use mysql as the database for Active Record
gem 'mysql2', '>= 0.4.4'
# Use Puma as the app server
gem 'puma', '~> 4.1'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
# gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Active Storage variant
# gem 'image_processing', '~> 1.2'
# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.2', require: false
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
# gem 'rack-cors'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
group :development do
gem 'listen', '~> 3.2'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
C'est pourquoi, mais il y a un joyau qui manque ...?
Même si je fais une installation groupée ...
Cela est sorti quand j'ai fait docker-compose build
.
Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Ajoutez ce qui suit avant RUN bundle install
dans le Dockerfile.
Magic Words: bundle config --local build.mysql2" --with-ldflags = -L / usr / local / opt / openssl / lib "\
Ce n'était pas bon. .. ..
Après avoir construit avec docker-compose build --no-cache
, j'ai fait docker-compose up
,
Ce n'était pas bon. ..
Recommended Posts