[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?

Überblick

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.

Fließe so weit

Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.

Lösung

① Installieren Sie MySQL lokal ②bundle install ③ Bestätigen Sie, dass Gemfile.lock erstellt wurde

Ursache

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.

Das Folgende ist die Umgebung / Geschichte.

Erstellte Datei

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

Die Methode, die nicht gelöst werden konnte

NG1: Ich werde magische Wörter und Sachen hinzufügen

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 .. ..

NG2: Löschen Sie den Cache

Nach dem Erstellen mit "Docker-Compose Build - No-Cache" habe ich "Docker-Compose" erstellt. Es war nicht gut ..

Recommended Posts

[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Aufbau der Rails Docker-Umgebung
Konstruktionsnotiz für die MySQL 5.7 (Docker) -Umgebung
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
[Rails / MySQL] Aufbau einer Mac-Umgebung
Ich kann das Docker-Image nach dem Update auf Docker Desktop 2.4.0.0 nicht finden
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
SQL-Anweisungslernen ~ Umgebungskonstruktion ~ Docker + MySQL
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Erstellen einer Umgebung für Laravel + MySQL + phpMyadmin mit Docker
Rails & React & Webpacker & MySQL Environment Konstruktionshandbuch
[Umgebungskonstruktion] Rails + MySQL + Docker (Anfänger können es auch in 30 Minuten verwenden!)
Verfahren zum Einführen von Docker in die Entwicklungsumgebung vorhandener Rails-Apps [Rails, MySQL, Docker]
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
Führen Sie die Docker-Umgebung Rails MySQL auf Heroku aus. Entwickeln und verstecken Sie die Twitter-API
Umweltbauweise und Fehlerbehebung zum Zeitpunkt der gemeinsamen Entwicklung (Schienen, Docker und Github)
Für diejenigen, die MySQL für die Datenbank in der Umgebungskonstruktion von Rails6 ~ verwenden möchten.
Ich erhalte Mysql2 :: Error :: ConnectionError in der Produktionsumgebung
Rails5 + MySQL8.0 + Top-Level-Volume-Umgebungskonstruktion mit Docker-Compose
Beachten Sie, dass ich beim Erstellen der Rails-Umgebung gestolpert bin
SSL in der lokalen Umgebung von Docker / Rails / Puma
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Ich kann den Bildschirm der Rails-Datenbankkonsole nicht verlassen
Als ich jetzt ansible + docker gestartet habe, bin ich von Anfang an gestolpert, aber ich habe es geschafft, es zu starten
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe die Docker-Konstruktion von Rails + Postgresql als offiziell durchgeführt, aber es hat nicht funktioniert, also habe ich einige Teile repariert.
Aufbau der Rails6-Entwicklungsumgebung [Mac]
Rails Engineer Environment Construction Ruby2.7.1
Ich habe versucht, node-jt400 (Umgebungskonstruktion)
Rails6 (MySQL, Ubuntu-Umgebung, Cloud9)
Schienen Umgebungsbau Schienen5.2.1 ruby2.5.1 Catalina
Redmine (Docker) Umgebungskonstruktionsnotiz
Aufbau der Docker x Spring Boot-Umgebung
[Docker] postgres, pgadmin4-Umgebungskonstruktion
Rails 6 (API-Modus) + MySQL Docker-Umgebungserstellung durch Docker-Compose (für Mac)
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Super Anfänger baut Rails 6 + Postgresql-Umgebung mit Docker bis zum Ende
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Bis die Docker-Umgebung erstellt und der Ubuntu-Container gestartet und gestoppt wurde