2013-01-22 6 views
6

Ich bin gerade einem Projekt beigetreten, das eine Rails-Engine entwickelt, die auch eine Dummy-App zum Testen hat.Wie man Migrationen für eine Schienenmaschine verwaltet + Dummy-App

foo/ 
foo/spec/dummy/ 

Es gibt identische Migrationen in

foo/db/migrate/ 
foo/spec/dummy/db/migrate/ 

Wenn ich rake db:migrate von dem Dummy-App, alles ist gut. Wenn ich das gleiche von der Engine mache (aktuelles Verzeichnis = foo) bekomme ich einen Fehler über mehrere Migrationen mit dem gleichen Namen.

Q1) Sind die Rakefiles geborken? (sollte db:migrate auf die Dummy-App recurse?)

Q2) Sollten die Migrationen nur in einem Verzeichnis sein? Wenn ja, welcher?

Wir verwenden Rails 3.2.9, Ruby 1.9.3p194.

Antwort

7

Frage 1
Die Rakefile sollte einen Eintrag für die spec/Dummy App zu berücksichtigen haben. Zum Beispiel

Bundler::GemHelper.install_tasks 
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__) 
load 'rails/tasks/engine.rake' 

Hier detaillierteres Beispiel Rakefile, https://github.com/twinge/questionnaire_engine/blob/engine2/Rakefile

Frage 2
IMO, die Migration nur auf dem foo/db/migrieren Ordner und nicht die foo existieren sollten/spec/dummy/db/migrieren. Tatsächlich kontrolliere ich nicht die db/migrate oder die db/schema des Dummys.

Warum? Ich benutze die Dummy-App, um sicherzustellen, dass eine vollständige Installation meiner Engine 100% funktioniert. Wenn ich also den Status foo/spec/dummy db kontrolliere, würde ich testen, ob es eine vorherige Installation gab.

Beispiel Motor
https://github.com/twinge/questionnaire_engine/tree/engine2