2016-12-21 2 views
1

Ich verwende das Heroku Postgres Addon für meine DB (Basisversion). Ruby Sequel ist mein ORM für das Schema-Management.Ruby Sequel-Migrationen laufen, können aber keine Spalten hinzufügen

In letzter Zeit haben einige Migrationen das DB-Schema nicht aktualisiert.

Ich betreibe Migration 19, 019_add_last_unique_story_to_user.rb:

Sequel.migration do 
    up do 
    alter_table(:state_tables) do 
     add_column :last_unique_story, Integer, default: 0 
     add_column :last_unique_story_read?, TrueClass, default: true 
    end 
    end 
    down do 
    alter_table(:state_tables) do 
     drop_column :last_unique_story 
     drop_column :last_unique_story_read? 
    end 
    end 
end 

Dies aktualisiert die DB [: schema_info] ab Version 18 bis 19, aber keine Spalten hinzugefügt, um die: state_table Tabelle. Dieses Problem besteht sowohl für Produktions- als auch für lokale Datenbanken. Ich habe versucht, mehrfach zu migrieren und überprüft, dass die Db-URL korrekt war.

Meine schnelle Lösung: Ich kopiere und klebte den obigen Code in einem 20. Migration, 020_test.rb und lief Aufgabe meine Harke Migration rake db:migrate:up. Dies hat die Datenbank erfolgreich aktualisiert.

Weiß jemand, was hier vor sich gehen könnte? Warum werden einige Migrationen erfolgreich ausgeführt, die Migrationsversion wird aktualisiert, aber keine Spalten aktualisiert? Könnte dies ein Benennungsproblem, ein Caching-Problem oder ein Heroku-Problem sein? Danke für deine Hilfe!

Antwort

1

Es hängt davon ab, wie Ihre Rake-Aufgabe geschrieben wird. Sequel versendet keine Rake-Aufgaben, also musst du überprüfen, woher du die Rake-Aufgabe hast.

Im Allgemeinen ist der einzige Grund, warum die Migration die Spalte nicht hinzufügen würde, wenn die Migration nicht ausgeführt wurde. Wenn beispielsweise die Schemaversion in der Datenbank bereits 19 ist, wird die Migration 19 nicht ausgeführt, wenn Sie migrieren. Dies würde erklären, warum die Migration ausgeführt wurde, als Sie sie in Migration 20 kopiert und anschließend migriert haben. Wenn Sie den Migrator mit einem Datenbankprotokollierer ausführen, protokolliert Sequel die Migrationsaktivität (zusätzlich zu SQL).

Verwandte Themen