2013-02-23 4 views
9

Ich versuche, alle aus meiner Tabellen schema.rbWie erstellt man eine Datenbank von schema.rb, ohne Rails zu initialisieren?

ich den Befehl zum Erstellen: „rake db: schema: load“

Dies ist jedoch fehl, weil in einem meiner initializers, ist es eine Referenzierung Modell/Tabelle, die offensichtlich nicht existiert (da die Datenbank leer ist)

Ich könnte diese Zeilen auskommentieren, und dann Schema ausführen: wieder laden, aber gibt es eine Alternative?

Antwort

5

Sie können in Ihrem Initialisierer eine Prüfung auf die Existenz der Tabelle hinzufügen.

if TheModel.table_exists? 
    // do something with the model 
end 
+0

Ich verwendete diese Methode im Initializer des ActiveAdmin-Edelsteins, da dieser Edelstein komplett unsachgemäß geladen wird. Wie auch immer, +1. – MrDerp

28

Der wahrscheinlich schnellste Weg besteht darin, den problematischen Initialisierer in ein temporäres Verzeichnis zu verschieben, das sich außerhalb der App befindet, und dann die Schemaladung auszuführen. Aber wenn das nicht funktioniert, oder ist keine Option, aus irgendeinem Grund, könnten Sie immer umgehen, dass von einem nackten Knochen Rails-Anwendung zu schaffen, das Schema Last zu tun:

  1. Erstellen Sie eine neue Schienen App: rails new (app)-fixer
  2. Kopieren Sie Ihre gemfile (sofern keine bestimmten Ausnahmen vorliegen) in die Fixer-App. Kopieren Sie Ihre database.yml Konfiguration in die Fixer-App.
  3. Kopieren Sie Ihre schema.rb Datei in die Fixer-App.
  4. Führen Sie alle für die App erforderlichen "Bündel installieren" -Befehle aus.
  5. Dann laufen "rake db:drop db:create db:schema:load"

, dass eine neue Datenbank von Grund auf neu aufbauen wird, basierend auf dem aktuellen Schema.

+0

Sollte die akzeptierte Antwort sein. Arbeitete wie ein Zauber – Aakanksha

Verwandte Themen