J'écrirai sur la pierre d'achoppement lors de l'introduction de l'outil de test automatisé Travis CI
.
・ Rubis 2.6.5 ・ Rails 6.0.3.2 ・ Mysql Ver 14.14 Distrib 5.6.47
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
.
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)
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
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!
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.
J'ai pu joindre ce badge à Readme en toute sécurité! !!
Recommended Posts