2009-06-04 3 views
13

Ich habe vor kurzem einige SQL-Funktionen zu meiner Datenbank über eine Migration hinzugefügt, und sie funktionieren einwandfrei. Code funktioniert, Datenbank funktioniert, Tests nicht. Die schema.rb-Datei sagt mir, dass es die neueste Version (und es ist korrekt), aber es enthält nur Definitionen für Tabellen und Indizes, nicht die Funktionen, die ich hinzugefügt habe.Warum fügt Rake db: migrate in Rails keine Funktionen zur Schemadatei hinzu?

Ich habe die Funktionen über die Methode "execute()" in meiner Migration hinzugefügt und benötigt sie in der Testdatenbank, damit die RSpec-Tests bestanden werden (Unternehmensrichtlinien schreiben vor, dass ich diese Änderungen erst bestätigen kann, wenn dies behoben ist). .

Weiß jemand, warum das passiert oder wie man es beheben kann? Ich kann manuell in die MySQL-Befehlszeile gehen und die Funktionen hinzufügen, aber dann werden sie gelöscht, wenn jemand das nächste Mal eine db ausführt: test: prepare. Ich brauche eine Lösung, die automatisiert werden kann.

Vielen Dank für jede Hilfe und Antworten,

-Mike Trpcic

Antwort

12

schema.rb ist das Schema Format Ruby und es funktioniert oder viele andere erweiterte Funktionen nicht unterstützt. Ändern Sie das Format in Plain SQL (in environment.rb) und Sie sollten gut gehen.

config.active_record.schema_format = :sql 

Edit: Nach Mikes Kommentar, habe ich ein wenig zu graben. Die Rake-Aufgabe zum Ablegen der Schemaaufrufe in den ActiveRecord-Verbindungsadapter für MySQL und Oracle. MySQL ist nicht sehr schlau und speichert nur die Tabellenstruktur und ignoriert alles andere. PostgreSQL, SQLite, SQL Server und Firebird rufen zu einer vom Hersteller bereitgestellten ausführbaren Datei auf.

mysqldumpdoesn't support dumping stored procedures vor Version 5.0.13.

Ich schaute mich um den Rails Lighthouse, aber auf der Suche nach offenen Tickets ist es viel schwieriger als es sein sollte. Wenn niemand sonst einen Fehler gemeldet hat, könnten Sie dies in Erwägung ziehen, obwohl es ohne Patch wahrscheinlich nicht funktioniert, dass irgendjemand daran arbeiten wird.

+1

Steve, Sie haben alle Informationen gefunden, die ich nicht konnte. Vielen Dank, es ist schön, endlich eine Antwort zu haben. –

+0

Ich schaue mir lieber das: Ruby Format an. Ich wünschte, es gäbe eine Möglichkeit, bestimmte Migrationen anzugeben, die bei jedem Laden der Datenbank aus schema.rb automatisch ausgeführt werden. –

Verwandte Themen