Schön, Sie kennenzulernen, dies ist mein erster Beitrag, daher möchte ich über mich selbst und den Grund für den Artikel schreiben.
Vorstellen Ich habe im September 2020 das DMM WEB CAMP abgeschlossen und bin ein Ingenieur, der derzeit den Job wechselt.
Der Auslöser für den Artikel Ich weiß nicht, ob andere Programmierschulen gleich sind, aber um es zu einer gemeinsamen Entwicklungsumgebung für alle Schüler zu machen, habe ich eine virtuelle Umgebung auf Vagrant aufgebaut und einen Lehrplan und ein Portfolio erstellt. Wenn Sie also noch nie eine eigene Umgebung von Grund auf neu erstellt haben und sich der praktischen Arbeit bewusst sind, wollte ich Docker selbst einbauen und begann zu lernen. Ich lerne immer noch, also ehrlich gesagt, ich denke, es gibt viele verdächtige Punkte, aber ich würde mich freuen, wenn es eine Referenz für Leute sein könnte, die auf die gleiche Weise studieren!
--Erstellen einer Entwicklungsumgebung mit Docker Es ist ein Bild, das es ermöglicht, das zu tun, was auf Vagrant on Docker getan wurde
--Notationen wie Dockerfile, Docker-Compose usw. Als Referenz ist die Entwicklungsumgebung bei Verwendung von Vagrant wie folgt
—— Mögliche Fehler beim Erstellen einer Entwicklungsumgebung von 0 und deren Behebung Wie am Anfang des Artikels erwähnt, gab es vor Docker einige Fehler, da zum ersten Mal eine lokale Umgebung erstellt wurde. Ich möchte hauptsächlich die Artikel vorstellen, auf die ich mich für die Lösung bezogen habe.
Grundkenntnisse in Dockerfile, Docker-Compose usw. Es gibt viele Artikel und Youtube über Docker, aber die meisten können kopiert und eingefügt werden. Zuerst dachte ich, es wäre einfacher zu verstehen, wenn ich das Dokument lese und meine Hände bewege, um zuerst den gesamten Mechanismus zu erfassen. Als Referenz habe ich an der folgenden Stelle angefangen zu lernen. Es wird empfohlen, da Sie sich ein Bild von Docker machen können und wissen, was Sie in einem halben bis zwei Tagen tun können, während Sie jedes Semester nachschlagen.
Einführung Docker: Grundkenntnisse und Funktionsweise von Docker
Schnellstart: Compose and Rails: So starten Sie Docker speziell mit Ruby on Rails ――Für die Auswahl der Lernmethode habe ich auf Youtube von KENTA / General Food Engineer TV verwiesen. Lernreihenfolge und Lehrmaterialien für die Aufnahme von AWS, Docker und CircleCI in das Portfolio
$ docker version
Client: Docker Engine - Community
Cloud integration 0.1.18
Version: 19.03.13
API version: 1.40
$ mkdir docker
#Bei Verwendung von Vagrant vom Desktop oder im Arbeitsverzeichnis ausführen
$ git clone [email protected]:Nutzername/Repository-Name.git
Nachdem Docker und das Projekt fertig sind, erstellen wir die zum Erstellen der Umgebung erforderlichen Dateien.
①Dockerfile
#In dem Verzeichnis, das Sie gerade geklont haben
$ touch Dockerfile
Füllen wir den folgenden Inhalt aus
#Geben Sie das ursprüngliche Docker-Image an. Passen Sie mit der Ruby-Version Ihres Portfolios zusammen
FROM ruby:2.5.7
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
#Geben Sie sqlite3 an
RUN apt-get update && apt-get install -y sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
#Erstellen Sie das myapp-Verzeichnis im Container, wenn Sie den Container starten
RUN mkdir /myapp
#Angabe des Arbeitsverzeichnisses im Container(Von RUN oben erstelltes Verzeichnis)
WORKDIR /myapp
#Kopieren Sie die Gem-Datei des Host-Computers und fügen Sie sie in das Verzeichnis im Container ein
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
#Lesen Sie die eingefügte Gemfile. Dies ist erforderlich, wenn die Bundler-Version 2 oder höher ist
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install
#Anwendung(Aktuelles Verzeichnis)Und fügen Sie es in ein Verzeichnis im Container ein
COPY . /myapp
#Veröffentlichen Sie den Port bei 3000
EXPOSE 3000
#Befehl im Container ausführen
CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]
--Über ENV BUNDLER_VERSION 2.1.4 Ich denke, es gibt eine solche Notation am unteren Rand von Gefile.lock, also überprüfen Sie es bitte.
Gemfile.lock
BUNDLED WITH
2.1.4
②docker-compose.yml
#Im selben Verzeichnis
$ touch docker-compose.yml
Füllen wir den folgenden Inhalt aus
docker-compose.yml
version: '3'
services:
web:
build:
context: ./
dockerfile: Dockerfile
#Geben Sie die Datei an, um die Änderungen zu speichern
volumes:
- .:/myapp
#Geben Sie den Port an
ports:
- "3000:3000"
#Lassen Sie den Container laufen
tty: true
stdin_open: true
Wenn Sie MySQL oder PostgreSQL verwenden, müssen Sie auch web + DB schreiben, aber im Fall von SQLite ist dies alles, was Sie brauchen. Ich habe noch nicht viel Wissen über diesen Bereich, daher möchte ich irgendwann zu MySQL wechseln ...
#Erstellen eines Docker-Images basierend auf einer Docker-Datei
$ docker-compose build
#Starten Sie den Docker-Container im Hintergrund
$ dokcer-compose up -d
#Aktualisieren Sie die Migration im Container
docker-compose run web rails db:migrate
Wenn Sie es jetzt unter dem üblichen [localhost: 3000](http: // localhost: 3000 /) anzeigen können, ist es ein Absatz!
Im Allgemeinen werde ich sie in chronologischer Reihenfolge auflisten. Wie eingangs erwähnt, sind der Inhalt des Fehlers und die Berücksichtigung der wahrscheinlichen Ursache untergeordnet, und der Hauptartikel wird die Referenz für die Lösung sein. Vielen Dank
①ActiveRecord::PendingMigrationError Migrations are pending "Es funktioniert mit Docker-Compose -d ...!"
$ docker-compose up -d
Creating network "~~~_default" with the default driver
Creating ~~~_web_1 ... done
Dies ist ein Fehler, der beim Zugriff auf die Seite unter localhost: 3000 aufgetreten ist. Lassen Sie uns nach dem Starten des Containers Docker-Compose ausführen und Web Rails ausführen. Db: migrieren, ich habe das Gefühl, dass es das gibt Referenz: ActiveRecord :: PendingMigrationError Migrationen stehen in Rails aus, die mit Docker-Compose gestartet wurden
②To install the missing version, run 'gem install bundler:2.1.4' "Ich kann keine Befehle ausführen, die mit dem Bundle beginnen (Deployment, Rspec usw.) ...!"
Traceback (most recent call last):
2: from
1: from
~
Could not find 'bundler' (2.1.4) required by your /Users/Nutzername/Verzeichnisname/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
Es ist ein Bild, dass "BUNDLED WITH 2.1.4" von Gemfile.lock, das beim Erstellen der Docker-Datei bestätigt wurde, lokal nicht gefunden werden kann.
Referenz: Um die fehlende Version zu installieren, führen Sie gem install bundler: 2.1.4
aus. Was tun, wenn es angezeigt wird
Versuchen Sie die Installation gemäß der Fehleranweisung. Wenn dies fehlschlägt, fahren Sie mit ③ fort
gem install bundler -v 2.1.4
③ERROR: While executing gem ... (Gem::FilePermissionError)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
"Du hast keine Erlaubnis, Edelsteine zu installieren ...!" Es gab viele Artikel darüber, wie man es mit sudo macht, aber ich denke, es ist besser, über die Zukunft nachzudenken, indem man ein Versionsverwaltungstool namens "rbenv" verwendet, als es so zu installieren, wie es ist.
Referenz 1: Was tun, wenn bei der Gem-Installation ein Berechtigungsfehler auftritt Referenz 2: Von der Ruby-Installation von rbenv zu Hello, World!
Wenn rbenv fertig ist, versuchen wir es erneut
gem install bundler -v 2.1.4
"Bundle ... immer noch nutzlos ...!"
Wenn die Gem-Installation abgeschlossen ist und ich das "Bundle ~" - System wie "Bereitstellen" eingebe, wird weiterhin eine Fehlermeldung angezeigt.
Install missing gem executables with `bundle install`
Wenn ich versuche, das Bundle gemäß der Fehleranweisung zu installieren
#Weil es lang ist, wird nur der letzte Teil extrahiert
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
In Gemfile:
mysql2
Es ist ein Fehler in MySQL, aber ich kannte die Ursache nicht selbst. Ich konnte es gemäß dem Artikel lösen, auf den ich unten verwiesen habe. Ich bin wirklich dankbar.
Referenz: [Rails] Was tun, wenn MySQL2 die Installation nicht bündeln kann?
Ich denke, Sie können jetzt bereitstellen.
⑤Could not find a JavaScript runtime ~
"Es funktioniert ...!"
Dies ist ein Fehler beim Ausführen von Rspec
$ bundle exec rspec spec/ --format documentation
An error occurred while loading ./spec/models/cart_item_spec.rb.
Failure/Error: require File.expand_path('../config/environment', __dir__)
ExecJS::RuntimeUnavailable:
Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
Wenn Sie zu Github fliegen, wird empfohlen, eines der ExecJS herunterzuladen. Es gab eine Möglichkeit, ein Juwel einzufügen, aber wenn ich Node.js auswählte und mit dem Herunterladen fortfuhr, wurde es reibungslos gelöst.
Jetzt können Sie auch Rspec ausführen.
Wir haben das Verfahren und die Fehler für die Migration von Vagrant zu Docker eingeführt. Es gibt immer noch viele Orte, an denen ich nicht genug gelernt habe, also dachte ich wieder, dass es viele Punkte gibt, an denen ich Docker nicht vollständig genutzt habe. Da es viele Artikel gab, auf die ich mich bezog, konnte ich sie in kürzerer Zeit einführen, als ich ursprünglich gedacht hatte. Ich finde es also gut, sie auszuprobieren.
Jetzt, da wir die gleichen Dinge wie in der vorherigen Vagabundumgebung tun können, möchten wir mit der Einführung von CircleCI weiter lernen, die Entwicklungsumgebung zu verbessern.
Da es mein erster Beitrag war, denke ich, dass es schwer zu verstehen war, aber danke, dass Sie bis zum Ende zugesehen haben!