Ich werde über den Stolperstein schreiben, wenn ich das automatisierte Testtool "Travis CI" vorstelle.
・ Ruby 2.6.5 ・ Schienen 6.0.3.2 ・ MySQL Ver 14.14 Distrib 5.6.47
Es gab ein Problem, dass das in ".travis.yml" beschriebene "db: create" nicht mit allen Mitteln bestanden hat, wie unten gezeigt.
script:
- bundle exec rake db:create RAILS_ENV=test
- bundle exec rake db:migrate RAILS_ENV=test
- bundle exec rspec
Ich habe eine solche Fehlermeldung auf dem Bildschirm "Travis CI" erhalten.
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Nach vielen Recherchen stellte ich fest, dass die Socket-Datei fehlte. Dies bedeutet, dass der Pfad zu der in "database.yml" beschriebenen Socket-Datei falsch ist. Die diesmal verwendete Datenbank ist "MySQL".
test:
<<: *default
database: (myapp)_test
adapter: mysql2
encoding: utf8
username: root
password:
socket: (Beschreibung hier)
Aber ich kannte die Dateistruktur im nicht-lokalen "Travis CI" nicht und beschloss, sie selbst zu überprüfen.
Der Befehl zum Ermitteln des Speicherorts der Socket-Datei lautet zunächst:
$ mysql_config --socket
In der lokalen Umgebung kann dies verstanden werden, daher habe ich diese Beschreibung hinzugefügt, da ich dachte, ich könnte den Speicherort von mysqld.sock
auf Travis CI finden, indem ich ihn in script:
of .travis.yml
schreibe. (Ich weiß nicht, ob es der richtige Weg ist ...)
script:
- mysql_config --Socket (← Überprüfen Sie die Socket-Datei)
- bundle exec rake db:create RAILS_ENV=test
- bundle exec rake db:migrate RAILS_ENV=test
- bundle exec rspec
Dann
Was für ein Wert ist zurück! Dies ist die Beschreibung in Zeile 515!
/var/run/mysql/mysqld.sock
Wenn Sie dies in database.yml schreiben, wurde db: create
erfolgreich bestanden!
Im Gegenteil, wenn Sie dies tun, funktioniert der lokale Test nicht. Wenn Sie also mit TravisCI testen, beziehen Sie sich auf den oben untersuchten Socket.
Erstellen Sie database_travis.yml
exklusiv für TravisCI
und schreiben Sie wie folgt.
test:
<<: *default
database: (myapp)_test
adapter: mysql2
encoding: utf8
username: root
password:
socket: /var/run/mysqld/mysqld.sock
Und fügen Sie Folgendes zu .travis.yml
hinzu
before_script:
- "cp config/database_travis.yml config/database.yml"
Wenn ich es nur zu diesem Zeitpunkt umschreibe, funktionierte der Test sowohl lokal als auch mit TravisCI. Es fiel mir schwer, die Ursache des Datenbankfehlers zu finden.
Ich konnte dieses Abzeichen sicher an Readme anbringen! !!
Recommended Posts