Ich bin gerade dabei, ein Portfolio zu erstellen. Da ich beim ersten Umgebungsbau sofort gestolpert bin, werde ich ihn einschließlich der Bedeutung des Memorandums schreiben. Ich würde mich freuen, wenn es Anfängern geliefert wird, die am selben Ort gestolpert sind.
$ docker-compose up
ist dieser Fehler ...Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
① Installieren Sie MySQL lokal ②bundle install ③ Bestätigen Sie, dass Gemfile.lock erstellt wurde
Die Hauptursache war, dass ich meine Umgebung verschmutzte, als ich MySQL lokal installierte. Es gibt ein Problem mit dem Socket und den Berechtigungen, und es scheint, dass "Bundle-Installation" MySQL nicht gut gezogen hat.
Löschen Sie daher alle MySQL-Verzeichnisse und installieren Sie MySQL erneut lokal. Danach erfolgt die Installation in Form einer Bundle-Installation.
Gemfile.lock funktionierte nicht gut, so dass "Docker-Compose Up" MySQL nicht zog.
Übrigens wurde die gemfile.lock nicht von bundle install
erstellt. (Weinen)
Schienen × Docker sagt, dass ein solcher lokaler Zustand beeinflussen kann. Ich habe viel gelernt.
Dockerfile und docker-compose.yml sehen so aus.
Dockerfile
#Verwenden Sie Ruby
FROM ruby:2.6.6
#Zeichencode UTF-Auf 8 setzen
ENV LANG C.UTF-8
#Stellen Sie die Zeitzone auf Japan ein
ENV TZ Asia/Tokyo
#Erstellen Sie ein App-Verzeichnis direkt unter dem Stammverzeichnis
RUN mkdir /app
#Im Arbeitsverzeichnis/Verschieben Sie durch Angabe der App
WORKDIR /app
#Teilen Sie Host Gemfile
COPY Gemfile /app/Gemfile
#Installieren Sie verschiedene Pakete
#libpq:Erforderlich, um MySQL mit Gem bereitzustellen
#sudo:Berechtigungsänderungsmanagement
#bundler(Mechanismus zum Installieren des in Gemfile beschriebenen Pakets)Installieren
RUN apt-get update -qq && apt-get install -y build-essential \
libpq-dev \
sudo \
&& gem install bundler:2.0.1
#Installieren Sie die in der Gemfile aufgeführten Pakete
#Schienen 6 in Gemfile.0.3'Ist aufgelistet
RUN bundle install
#/Teilen Sie das aktuelle Verzeichnis mit der App
COPY . /app
(Es ist schwer zu sehen, weil es voller Kommentare ist ...)
docker-compose.yml
version: "3"
#Erstellen Sie Datenbank- und Backend-Container
services:
db:
container_name: db
#Ziehen Sie das auf Docker Hub hochgeladene Bild
image: mysql:latest
#Einstellungen für Umgebungsvariablen
environment:
TZ: Asia/Tokyo #Stellen Sie TimeZone und Dockerfile ein
MYSQL_DATABASE: linpy_database #Legen Sie den Datenbanknamen fest
MYSQL_ROOT_PASSWORD: ***** #Legen Sie das Root-Benutzerpasswort fest
MYSQL_USER: ***** #Benutzer definieren
MYSQL_PASSWORD: ***** #Stellen Sie das obige Benutzerkennwort ein
#Geben Sie den Pfad der Konfigurationsdatei an, die gemountet werden soll
volumes:
- mysql_data:/var/lib/mysql
#Port einstellen
ports:
- 3307:3306
#Stellen Sie die IP-Adresse ein
networks:
app_net: #App unten_Stellen Sie die folgenden IPs im Netznetzwerkbereich ein
ipv4_address: '172.20.0.2'
backend:
container_name: backend
#Führen Sie ComposeFile aus und geben Sie den Pfad an, wenn er erstellt wird
build: ./backend/
image: backend
#Führen Sie gem aus, um den Server zu starten, 0.0.0.Für vollen Zugriff an 0 binden
command: bundle exec rails server -b 0.0.0.0
#Starten Sie immer den Behälter
tty: true
#Starten Sie den Docker-Lauf für die Eingabeschnittstelle-gleichbedeutend damit
stdin_open: true
#Backend ist Cache, temp, log,Auf Git montieren
volumes:
- ./backend:/app:cached
- bundle_data:/usr/local/bundle:cached
- /app/vendor
- /app/tmp
- /app/log
- /app/.git
environment:
TZ: Asia/Tokyo
#Startreihenfolge steuern,Nach db
depends_on:
- db
ports:
- 5000:3000 #Anschlussweiterleitung
networks:
app_net:
ipv4_address: '172.20.0.3'
#Richten Sie Ihr eigenes Netzwerk ein
networks:
#app_Definieren Sie einen Netzwerkbereich namens net
app_net:
driver: bridge #Bridge Verbindung zum Netzwerk herstellen
ipam: #IP-Einstellungen
driver: default
config:
- subnet: 172.20.0.0/24 #Subnetz definieren
#Definieren Sie zwei 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]
Deshalb, aber es fehlt ein Juwel ...? Obwohl ich "Bundle-Installation" mache ... Dies kam heraus, als ich "Docker-Compose Build" machte.
Fetching mysql2 0.5.3
Installing mysql2 0.5.3 with native extensions
Fügen Sie vor der Installation des RUN-Bundles Folgendes in die Docker-Datei ein.
Magic Words: bundle config --local build.mysql2" --with-ldflags = -L / usr / local / opt / openssl / lib "\
Es war nicht gut .. ..
Nach dem Erstellen mit "Docker-Compose Build - No-Cache" habe ich "Docker-Compose" erstellt. Es war nicht gut ..