[RUBY] [Rails] Présentation de Travis CI et rester coincé dans db: create

introduction

J'écrirai sur la pierre d'achoppement lors de l'introduction de l'outil de test automatisé Travis CI.

environnement

・ Rubis 2.6.5 ・ Rails 6.0.3.2 ・ Mysql Ver 14.14 Distrib 5.6.47

problème

Il y avait un problème que le db: create décrit dans .travis.yml ne passait pas par tous les moyens comme indiqué ci-dessous.


script:
  - bundle exec rake db:create RAILS_ENV=test
  - bundle exec rake db:migrate RAILS_ENV=test
  - bundle exec rspec

J'ai eu un message d'erreur comme celui-ci sur l'écran Travis CI.

DBcreate.png

Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Après de nombreuses recherches, j'ai trouvé que le fichier socket était manquant. Cela signifie que le chemin d'accès au fichier socket décrit dans database.yml est incorrect. La base de données utilisée cette fois est «MySQL».


test:
  <<: *default
  database: (myapp)_test
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  socket: (Description ici)

Solution

Mais je ne connaissais pas la structure des fichiers dans le Travis CI non local, alors j'ai décidé de le vérifier moi-même.

Tout d'abord, la commande pour trouver l'emplacement du fichier socket est:

$ mysql_config --socket

Dans l'environnement local, cela peut être compris, j'ai donc ajouté cette description parce que je pensais pouvoir trouver l'emplacement de mysqld.sock sur Travis CI en l'écrivant dans script: of .travis.yml. (Je ne sais pas si c'est la bonne voie ...)


script:
  - mysql_config --socket (← Vérifiez le fichier socket)
  - bundle exec rake db:create RAILS_ENV=test
  - bundle exec rake db:migrate RAILS_ENV=test
  - bundle exec rspec

ensuite

MySQL.soke.png

Quelle valeur est de retour! Voici la description à la ligne 515!

/var/run/mysql/mysqld.sock

Si vous écrivez ceci dans database.yml, db: create a réussi!

Utilisation appropriée pour les locaux et Travis CI

Au contraire, le test local ne fonctionnera pas s'il est laissé tel quel, donc lorsque vous testez avec Travis CI, reportez-vous au socket examiné ci-dessus.

Créez database_travis.yml exclusivement pour TravisCI et écrivez comme suit.


test:
  <<: *default
  database: (myapp)_test
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

Et ajoutez ce qui suit à .travis.yml


before_script:
  - "cp config/database_travis.yml config/database.yml"

Si je le réécris seulement à ce moment, le test fonctionnait à la fois localement et TravisCI. J'ai eu du mal à trouver la cause de l'erreur de base de données.

buildpass.png

J'ai pu joindre ce badge à Readme en toute sécurité! !!

Recommended Posts

[Rails] Présentation de Travis CI et rester coincé dans db: create
[Rails] Comment exécuter "rails db: create" etc. dans l'environnement de production EC2
Activer jQuery et Bootstrap dans Rails 6 (Rails 6)
Créer une nouvelle application avec Rails
Supprimez les "actifs" et les "turbolinks" dans "Rails6".
Fonction CRUD et MVC dans Rails
[Rails] Stocker uniquement les éléments cochés dans la base de données
Débutant a créé un portfolio avec Ruby on Rails
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6