[RUBY] [Rails] Travis CI vorstellen und in db: create stecken bleiben

Einführung

Ich werde über den Stolperstein schreiben, wenn ich das automatisierte Testtool "Travis CI" vorstelle.

Umgebung

・ Ruby 2.6.5 ・ Schienen 6.0.3.2 ・ MySQL Ver 14.14 Distrib 5.6.47

Problem

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.

DBcreate.png

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)

Lösung

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

MySQL.soke.png

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!

Ordnungsgemäße Verwendung für lokale und Travis CI

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.

buildpass.png

Ich konnte dieses Abzeichen sicher an Readme anbringen! !!

Recommended Posts

[Rails] Travis CI vorstellen und in db: create stecken bleiben
[Rails] Ausführen von "Rails db: create" usw. in der Produktionsumgebung EC2
Aktivieren Sie jQuery und Bootstrap in Rails 6 (Rails 6).
Erstellen Sie eine neue App mit Rails
Entfernen Sie "Assets" und "Turbolinks" in "Rails6".
CRUD-Funktion und MVC in Rails
[Schienen] Speichern Sie nur markierte Elemente in der Datenbank
Anfänger haben mit Ruby on Rails ein Portfolio erstellt
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet