[RUBY] Ich habe versucht, das auf Vagrant erstellte Portfolio in die Entwicklungsumgebung von Docker zu migrieren

Einführung

Schön, Sie kennenzulernen, dies ist mein erster Beitrag, daher möchte ich über mich selbst und den Grund für den Artikel schreiben.

Was ist in diesem Artikel zu tun?

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

スクリーンショット 2020-09-13 12.40.05.png

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

In diesem Artikel nicht behandelt

Vorbereitungen


$ 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

Vorbereitung jeder Datei

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

Beginnen wir den Container

#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!

Fehler gefangen und wie man ihn behebt

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

④ Ich kann die Installation nicht bündeln

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

Am Ende

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!

Recommended Posts

Ich habe versucht, das auf Vagrant erstellte Portfolio in die Entwicklungsumgebung von Docker zu migrieren
Ich habe versucht, eine React.js x TypeScript x Material-Benutzeroberfläche in einer Docker-Umgebung zu erstellen
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
[Erste Umgebungskonstruktion] Ich habe versucht, eine Rails6 + MySQL8.0 + Docker-Umgebung unter Windows 10 zu erstellen.
So überprüfen Sie die in der PC-Entwicklungsumgebung auf Ihrem Smartphone erstellte WEB-Anwendung
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, die Methode zu erklären
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Sondervortrag über Multiskalensimulation: Ich habe versucht, den 5. zusammenzufassen
Ich habe versucht, mit Eclipse + Tomcat eine http2-Entwicklungsumgebung zu erstellen
Hinweise zum Erstellen der Kotlin-Entwicklungsumgebung und zur Migration von Java nach Kotlin
Sondervortrag über Multi-Scale-Simulation: Ich habe versucht, den 8. zusammenzufassen
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Erstellen einer Spring Boot-Entwicklungsumgebung in Vagrant
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, AdoptOpenjdk 11 unter CentOS 7 zu erstellen
Was ist Docker? Ich habe versucht zusammenzufassen
Erstellen Sie eine Ultra96v2-Entwicklungsumgebung auf Docker 1
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Ich habe versucht, die Reflexmessanwendung im Google Play Store zu veröffentlichen
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
Verbessern Sie die Leistung der Docker-Entwicklungsumgebung
Ich möchte die stärkste lokale Entwicklungsumgebung mit VSCode Remote Containers erstellen
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
Als ich versuchte, die Rails-App von Progate auf meinem PC (lokale Umgebung) zu reproduzieren, blieb ich bei der Bildanzeige hängen
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Einführung in Slay the Spire Mod Development (2) Konstruktion der Entwicklungsumgebung