Ravi de vous rencontrer, c'est mon premier article, alors j'aimerais écrire sur moi-même et la raison de l'article.
Auto-introduction Je suis diplômé du DMM WEB CAMP en septembre 2020 et suis un ingénieur qui change actuellement de poste.
Le déclencheur de l'article Je ne sais pas si les autres écoles de programmation sont les mêmes, mais afin de créer un environnement de développement commun pour tous les élèves, j'ai construit un environnement virtuel sur vagrant et créé un programme et un portfolio. Par conséquent, si vous n'avez jamais créé votre propre environnement à partir de zéro et que vous êtes conscient du travail pratique, je voulais installer Docker par moi-même et j'ai commencé à apprendre. J'étudie toujours, donc honnêtement, je pense qu'il y a beaucoup de points suspects, mais je serais heureux si cela pouvait être utilisé comme référence pour les gens qui étudient de la même manière!
--Construire un environnement de développement à l'aide de Docker C'est une image qui permet de faire ce qui a été fait sur Vagrant sur Docker
--Notation telle que Dockerfile, docker-compose, etc. Pour référence, l'environnement de développement lors de l'utilisation de Vagrant est le suivant
—— Erreurs possibles lors de la création d'un environnement de développement à partir de 0 et comment les résoudre Comme mentionné au début de l'article, il y avait des erreurs avant docker car c'était la première fois que l'on construisait un environnement local. Je voudrais principalement présenter les articles auxquels j'ai fait référence pour la solution.
Connaissance de base de Dockerfile, docker-compose, etc. Il existe de nombreux articles et youtube sur Docker, mais la plupart d'entre eux peuvent être copiés et collés, donc au début, j'ai pensé qu'il serait plus facile à comprendre en lisant le document et en déplaçant mes mains pour saisir tout le mécanisme en premier. Pour référence, j'ai commencé à apprendre sur le site suivant. Il est recommandé car vous pouvez vous faire une idée de Docker et de ce que vous pouvez faire en une demi-journée à deux jours tout en recherchant chaque trimestre.
Introduction Docker: Connaissances de base et fonctionnement de docker
Quickstart: Compose and Rails: Comment démarrer docker spécifiquement avec Ruby on Rails ――Pour la sélection de la méthode d'apprentissage, je me suis référé à youtube de KENTA / General Food Engineer TV. À propos de la séquence d'apprentissage et du matériel pédagogique pour intégrer AWS, Docker et CircleCI dans le portefeuille
--Installation de Docker
Faisons-le depuis ce site officiel
https://hub.docker.com/editions/community/docker-ce-desktop-mac
Ce n'est pas grave si vous pouvez vérifier la version dans le terminal
$ docker version
Client: Docker Engine - Community
Cloud integration 0.1.18
Version: 19.03.13
API version: 1.40
--Git cloner le portefeuille (le projet que vous souhaitez utiliser comme environnement de développement Docker) Comme vous pouvez le voir au début de l'article, apportons ce que vous voulez pour construire l'environnement localement à partir de github car vous êtes déjà au stade de la création d'un portefeuille.
$ mkdir docker
#Exécuter depuis le bureau ou dans le répertoire de travail lors de l'utilisation de vagrant
$ git clone [email protected]:Nom d'utilisateur/Nom du référentiel.git
Maintenant que le Docker et le projet sont prêts, nous allons créer les fichiers nécessaires à la construction de l'environnement.
①Dockerfile
#Sur le répertoire que vous venez de cloner
$ touch Dockerfile
Remplissons le contenu suivant
#Spécifiez l'image du menu fixe d'origine. Correspondre à la version rubis de votre portfolio
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/*
#Spécifiez sqlite3
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
#Créez le répertoire myapp dans le conteneur lorsque vous démarrez le conteneur
RUN mkdir /myapp
#Spécifier le répertoire de travail dans le conteneur(Répertoire créé par RUN ci-dessus)
WORKDIR /myapp
#Copiez le fichier gem de la machine hôte et collez-le dans le répertoire à l'intérieur du conteneur
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
#Lisez le gemfile collé. Ceci est requis si la version du bundler est 2 ou ultérieure
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install
#application(Répertoire actuel)Et collez-le dans un répertoire à l'intérieur du conteneur
COPY . /myapp
#Publier le port à 3000
EXPOSE 3000
#Exécuter la commande dans le conteneur
CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]
--À propos de ENV BUNDLER_VERSION 2.1.4 Je pense qu'il y a une telle notation au bas de Gefile.lock, alors veuillez la vérifier.
Gemfile.lock
BUNDLED WITH
2.1.4
②docker-compose.yml
#Sur le même répertoire
$ touch docker-compose.yml
Remplissons le contenu suivant
docker-compose.yml
version: '3'
services:
web:
build:
context: ./
dockerfile: Dockerfile
#Spécifiez le fichier pour enregistrer les modifications
volumes:
- .:/myapp
#Spécifiez le port
ports:
- "3000:3000"
#Gardez le conteneur en marche
tty: true
stdin_open: true
Si vous utilisez MySQL ou PostgreSQL, vous devez écrire web + DB, mais dans le cas de SQLite, c'est tout ce dont vous avez besoin. Je n'ai pas encore beaucoup de connaissances dans ce domaine, alors j'aimerais éventuellement passer à MySQL ...
#Créer une image Docker basée sur un Dockerfile
$ docker-compose build
#Démarrer le conteneur Docker en arrière-plan
$ dokcer-compose up -d
#Mettre à jour la migration dans le conteneur
docker-compose run web rails db:migrate
Maintenant, si vous pouvez l'afficher à l'habituel [localhost: 3000](http: // localhost: 3000 /), c'est un paragraphe!
En général, je les énumérerai par ordre chronologique. Comme mentionné au début, le contenu de l'erreur et la considération de la cause probable sont inférieurs, et l'article principal est l'introduction de l'article qui a servi de référence pour la résolution. Merci beaucoup
①ActiveRecord::PendingMigrationError Migrations are pending "Cela fonctionne avec docker-compose up -d ...!"
$ docker-compose up -d
Creating network "~~~_default" with the default driver
Creating ~~~_web_1 ... done
Il s'agit d'une erreur qui s'est produite lors de l'accès à la page sur localhost: 3000. Après avoir démarré le conteneur, faisons docker-compose run web rails db: migrate, j'ai l'impression qu'il y a Référence: ActiveRecord :: PendingMigrationError Les migrations sont en attente dans Rails lancées avec docker-compose up
②To install the missing version, run 'gem install bundler:2.1.4' "Je ne peux pas faire de commandes commençant par bundle (deploy, Rspec, etc.) ...!"
Traceback (most recent call last):
2: from
1: from
~
Could not find 'bundler' (2.1.4) required by your /Users/Nom d'utilisateur/Nom du répertoire/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`
C'est une image que "BUNDLED WITH 2.1.4" de Gemfile.lock, qui a été confirmée lors de la création du Dockerfile, ne peut pas être trouvée localement.
Référence: Pour installer la version manquante, exécutez gem install bundler: 2.1.4
Que faire quand il apparaît
Essayez d'installer selon l'instruction d'erreur, si cela échoue, allez à
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.
"Vous n'avez pas la permission d'installer des gemmes ...!" Il y avait beaucoup d'articles sur le faire avec sudo à l'esprit, mais je pense qu'il vaut mieux penser à l'avenir en utilisant un outil de gestion de version appelé "rbenv" plutôt que de l'installer tel quel.
Référence 1: Que faire lorsqu'une erreur d'autorisation se produit lors de l'installation de gem Référence 2: De l'installation de Ruby par rbenv à Hello, World!
Quand rbenv est prêt, essayons à nouveau
gem install bundler -v 2.1.4
"Bundle ... toujours inutile ...!"
Lorsque l'installation de gem est terminée, lorsque j'entre dans le système "bundle ~" tel que deploy, un message d'erreur apparaît toujours.
Install missing gem executables with `bundle install`
Lorsque j'essaye d'installer le bundle selon l'instruction d'erreur
#Parce que c'est long, seule la dernière partie est extraite
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
C'est une erreur autour de mysql, mais je n'en connaissais pas la cause par moi-même. J'ai pu le résoudre selon l'article auquel j'ai fait référence ci-dessous, je suis vraiment reconnaissant.
Référence: [Rails] Que faire lorsque MySQL2 ne peut pas regrouper l'installation
Je pense que vous pouvez maintenant déployer.
⑤Could not find a JavaScript runtime ~
"Ça marche ...!"
Il s'agit d'une erreur lors de l'exécution de 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.
Si vous volez vers github, il vous recommande de télécharger l'un des ExecJS. Il y avait un moyen d'insérer une gemme, mais si je sélectionnais Node.js et procédais au téléchargement, le problème était résolu sans problème.
Maintenant, vous pouvez également faire Rspec.
Nous avons présenté la procédure et les erreurs de migration de vagrant à docker. Il y a encore de nombreux endroits où je n'ai pas suffisamment étudié, alors j'ai pensé à nouveau qu'il y a de nombreux points où je n'ai pas pleinement utilisé docker. Puisqu'il y avait de nombreux articles auxquels j'ai fait référence, j'ai pu le présenter en moins de temps que je ne le pensais au départ, donc je pense que c'était bien de l'essayer.
Maintenant que nous pouvons faire la même chose que l'environnement vagabond précédent, nous aimerions continuer à apprendre à améliorer l'environnement de développement avec l'introduction de CircleCI.
Comme c'était mon premier post, je pense que c'était difficile à comprendre, mais merci d'avoir regardé jusqu'au bout!