web-dev-qa-db-de.com

Rails rake db: migrate hat keine Auswirkung

Ich habe heute eine neue Rails 3-App erstellt, eine einfache Migration hinzugefügt und aus irgendeinem Grund passiert nichts, wenn ich db: migriere. Es hält nur ein paar Sekunden an und kehrt dann zum Befehl Prompt zurück, ohne Fehler oder irgendetwas. Schema.rb und die Datenbank bleiben leer.

Irgendwelche Ideen, was los sein könnte? Ich habe viele Apps gemacht und hatte dieses Problem noch nie. Alles ist ebenfalls ein Standard-Setup.

28
Jack Hoge

Es gibt einige Gründe, warum Ihre Migrationen nicht ausgeführt werden. Der häufigste Grund ist jedoch, dass das System bereits den Eindruck hat, dass alle von Ihnen definierten Migrationen bereits ausgeführt wurden.

Bei jeder Migration wird in der Tabelle schema_migrations ein Eintrag erstellt, wobei die Spalte version der Identifizierungsnummer entspricht. Wenn Sie die erneute Ausführung einer Migration erzwingen möchten, können Sie sie normalerweise rückgängig machen und erneut versuchen. Wenn Sie beispielsweise 20100421175455_create_things.rb hätten, würden Sie es erneut ausführen, indem Sie Folgendes verwenden:

rake db:migrate:redo VERSION=20100421175455

Eine häufige Situation ist, dass Ihre Migration überhaupt nicht ausgeführt wurde, dass sie beispielsweise eine Ausnahme generiert hat und dennoch von Rails als abgeschlossen betrachtet wird. Um eine Migration zwangsweise erneut auszuführen, löschen Sie den entsprechenden Datensatz aus der Tabelle schema_migrations und führen Sie rake db:migrate erneut aus.

Eine Möglichkeit, solche Probleme in Zukunft zu vermeiden, besteht darin, Ihre Migrationen mit einem automatischen Zurücksetzungsverfahren zu definieren:

class CreateThings < ActiveRecord::Migration
  def self.up
    # ... (migration) ...

  rescue
    # If an exception occurs, back out of this migration, but ignore any
    # exceptions generated there. Do the best you can.
    self.down rescue nil

    # Re-raise this exception for diagnostic purposes.
    raise
  end
end

Wenn Sie bei der Migration einen Fehler haben, wird die Ausnahme in der Konsole angezeigt. Da die Migration automatisch rückgängig gemacht wurde, sollten Sie sie immer wieder ausführen können, bis Sie sie richtig verstanden haben.

62
tadman

Der Aufruf von spring stop löst möglicherweise Ihre Probleme.

1
limlim

Ich stand vor demselben Problem. Ich habe eine Art kurzer Hack gemacht, der mir geholfen hat. Ich poste es nur für den Fall, dass jemand eine kurze und süße Lösung wünscht. Ich stimme dem zu, was Tadman sagt 

"Das System hat bereits den Eindruck, dass alle von Ihnen definierten Migrationen bereits ausgeführt wurden."

Ich habe den Namen der Migrationsdatei im Ordner/app_folder/db/migrate geändert. Ich denke, der numerische Teil im Namen der Ruby-Migrationsdatei ist der Zeitpunkt, zu dem die Datei erstellt wurde. 

Sie können dem Dateinamen jedes Mal 1 hinzufügen, wenn Sie die Migration erneut ausführen möchten. Nachdem Sie den Namen geändert haben, löschen/löschen Sie die Tabelle (ich habe das MySQL-Befehlszeilentool zum Löschen verwendet) und führen Sie dann rake db: migrate aus, und die Migrationen sollten durchgeführt werden.

0
Gaurav

Nun, ich habe herausgefunden, was mein Problem verursacht hat. Ich verwende den slim_scrooge-Edelstein, und durch das Kommentieren wird alles normal ablaufen. Ich weiß nicht warum ...

0
Jack Hoge

Ich hatte heute ein ähnliches Problem während der Migration des Plugins für Redmine

rake redmine:plugins:migrate Rails_ENV=production NAME=plugin_name

dabei ist plugin_name eigentlich der Name des Plugins, der in init.rb des Plugins definiert ist.

Ich habe 4 Stunden lang gekämpft und schließlich herausgefunden, dass mein Plugin-Verzeichnis nicht mit dem Plugin-Namen übereinstimmt (beachten Sie das Präfix redmine_):

~/redmine/plugins/redmine_plugin_name

Stellen Sie daher sicher, dass sich Ihr Plugin im Ordner mit dem Namen des Plugins befindet. Ich glaube, es gilt auch für andere Rails-Apps.

0
Anton R