Führen Sie für In Heroku bereitstellen "% git push heroku master" und aus Fehler beim Ausführen des folgenden Befehls
Terminal
% heroku run rake db:migrate
Der Fehler nach dem Ausführen des obigen Befehls ist wie folgt
Terminal (Teil der Fehleranweisung)
PG::UndefinedTable: ERROR: relation "XXXXXX" does not exist
#"XXXXXX"Tabellenname
Unten weggelassen
Weil der Zwischentabellenname in der Fehleranweisung enthalten war Es stellt sich heraus, dass es sich um einen tabellenbezogenen Fehler handelt.
Weil es vor Ort gut funktioniert hat Ich denke, diesmal gibt es Fehler, die nur in der Produktionsumgebung auftreten können.
Ich habe einen Fehler in der Reihenfolge gemacht, in der die Migrationsdateien erstellt wurden. (Phänomen im Fall von Herok)
Mit Herok migrieren (% heroku run rake db: migrieren) Dies erfolgt in der Reihenfolge des Erstellungsdatums.
Erstellen Sie dieses Mal zuerst eine Datei, die sich auf die Zwischentabelle bezieht (song_discs-Tabelle). Später habe ich eine Datei über die Tabelle (Discs-Tabelle) über diese Tabelle erstellt. Dies ist ein Fehler. Kurz gesagt, ich denke, die Zwischentabelle kann später erstellt werden.
Es wurde in der Migrationsdatei der Zwischentabelle beschrieben. Da ich durch Berühren der Datei arbeite, kopiere ich sie an einen anderen Speicherort, damit ich mir keine Sorgen machen muss, wenn der Inhalt verloren geht. ❗️ Bitte lesen Sie unbedingt ❗️ Als Prozess zum Ändern der Reihenfolge der Dateierstellung Datei löschen! Der Inhalt wird auch verschwinden! "Ich möchte die Beschreibung in der Datei so verwenden, wie sie ist!" "Ich möchte den Inhalt nicht ändern!" Zu diesem Zeitpunkt kopieren Sie bitte die Beschreibung in die Datei (zur Sicherung) irgendwo hin. Bitte beachten Sie, dass der Inhalt beim Löschen der Datei zerstört wird.
Mit diesem Befehl können Sie den Verlauf überprüfen
Terminal
% bundle exec rake db:migrate:status
Überprüfen Sie die Migrations-ID, um die Version herauszufinden Sie sind in der Reihenfolge angeordnet, in der sie erstellt wurden.
Beispiel
database:App Name_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200723033017 Devise create users
up 20200727050028 Create songs
up 20200731024511 Create user songs
up 20200801063906 Create songcolors
down 20200821150924 Song-Discs erstellen ← Die Zwischentabelle wird zuerst erstellt.
up 20200821160923 Create discs
Da ich diesmal zuerst eine Zwischentabelle namens song_discs erstellt habe Gelöscht, um die Datei neu zu erstellen.
Der Status der Datei, die Sie löschen möchten, muss "down" sein.
Beispiel
database:App Name_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200723033017 Devise create users
up 20200727050028 Create songs
up 20200731024511 Create user songs
up 20200801063906 Create songcolors
down 20200821150924 Create song discs
up 20200821160923 Create discs
Wenn es wie im obigen Beispiel "down" ist, fahren Sie mit der Löscharbeit fort, wie sie ist Wenn es "oben" ist, ändern Sie es in "unten" und löschen Sie es dann. ("VERSION = Migrations-ID der Datei, die Sie löschen möchten" kann gelöscht werden.)
Beispielbefehl zum Herunterfahren des Status
% rails db:migrate:down VERSION=20200821150924
Es ist möglicherweise zuverlässiger, den Namen der Migrationsdatei so zu kopieren, wie er ist.
Terminal
% rm -rf db/migrate/Dateiname, den Sie löschen möchten
Beispiel
% rm -rf db/migrate/20200821150924_create_song_discs.rb
"% Bundle exec rake db: migrate: status" erneut Wenn es verschwindet, ist das Löschen erfolgreich
Beispiel
database:App Name_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200723033017 Devise create users
up 20200727050028 Create songs
up 20200731024511 Create user songs
up 20200801063906 Create songcolors
up 20200821160923 Create discs
Führen Sie den Befehl aus, um nur die Migrationsdatei zu erstellen.
Terminal
%Rails g Migration Der Name der Migrationsdatei, die Sie erstellen möchten
Beispiel
% rails g migration create_song_discs
Ein Beispiel für die fertige Datei ist "20200912095202_create_song_discs.rb". Vergessen Sie nicht, create einzufügen!
Es ist sicher, den Verlauf mit "% bundle exec rake db: migrate: status" hier zu überprüfen.
Bearbeiten Sie sie gegebenenfalls vor der Datenbankmigration (Dies ist der in der Prämisse beschriebene Inhalt.)
In meinem Fall ist der Inhalt diesmal der gleiche wie in der gelöschten Datei Ich habe das, was ich kopiert und im Voraus gespeichert habe, eingefügt.
Da der Status nicht "down" bleiben kann, führen Sie den folgenden Befehl aus Wechseln Sie zu "up".
% rails db:migrate
Außerdem werde ich hier überprüfen, ob es in meiner lokalen Umgebung funktioniert! Da ich die Datei berühre, überprüfe ich, ob etwas nicht stimmt, und fahre mit dem nächsten Schritt fort.
Zu diesem Zeitpunkt sind die Gegenmaßnahmen abgeschlossen Versuchen Sie es mit der Bereitstellung! !!
Wie machst du das? Wenn Sie Fragen haben, klicken Sie bitte hier. (https://qiita.com/kusaharajiji/items/9287235d56843c03734c)!
Danke für deine harte Arbeit! !! Haben Sie es bereitgestellt? Ich bin sehr glücklich, den Fehler zu beheben!
Für den Heroku-Einsatz Achten Sie auf die Reihenfolge der Erstellung von Migrationsdateien!
Diesmal habe ich viel gelernt. Wenn Sie es beiläufig machen, werden Sie nur stolpern, als ob Sie sagen würden: "Sie verstehen hier nicht!" Vielen Dank für den Fehler. Als ich den Artikel schrieb, stellte ich einen neuen Mangel an Verständnis fest.
① Informationen zu "Auf" und "Ab", die im Verlauf der Migrationsdateien angezeigt werden (2) Bezüglich der Regeln zum Erstellen von Migrationsdateien (ist dies auf Heroku beschränkt?)
Ich bin auch neugierig darauf, also würde ich es gerne noch einmal schreiben, also werde ich es hier aufnehmen.
Überlegen Sie sich auch andere Lösungen: Beim Erstellen einer Migrationsdatei habe ich versucht, sie zu löschen, indem ich den Befehl zum Erstellen eines Modells (% Rails g Modellmodellname) umgekehrt und erneut versucht habe. Dies schien jedoch schwierig zu sein, da Dateien mehr als erforderlich gelöscht wurden. Daher habe ich aufgehört. Ta! Sie müssen wissen, was der Löschbefehl ~ löschen wird (Natürlich lol)
Bitte lesen Sie bis zum Ende Vielen Dank! Wir sehen uns wieder: entspannt :: Welle:
Recommended Posts