如何管理rails引擎+虚拟应用程序的迁移

zja*_*ish 8 rake rails-engines ruby-on-rails-3

我刚加入了一个开发rails引擎的项目,该项目还有一个用于测试的虚拟应用程序.

foo/
foo/spec/dummy/
Run Code Online (Sandbox Code Playgroud)

有相同的迁移

foo/db/migrate/
foo/spec/dummy/db/migrate/
Run Code Online (Sandbox Code Playgroud)

如果我rake db:migrate从虚拟应用程序,一切都很好.如果我从引擎(当前目录= foo)执行相同操作,则会收到有关具有相同名称的多次迁移的错误.

Q1)Rakefiles是否被剔除了?(应该db:migrate递归到虚拟应用程序?)

Q2)迁移只能在一个目录中吗?如果是这样,哪一个?

我们使用的是Rails 3.2.9,ruby 1.9.3p194.

wes*_*ter 8

问题1
Rakefile应该有一个条目来说明spec/dummy应用程序.例如,

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

这里有更详细的例子rakefile,https://github.com/twinge/questionnaire_engine/blob/engine2/Rakefile

问题2
IMO,迁移应该只存在于foo/db/migrate文件夹中,而不是 foo/spec/dummy/db/migrate.实际上,我没有版本控制虚拟的db/migrate或db/schema.

为什么?我使用虚拟应用程序,确保我的引擎安装完全100%.因此,如果我的版本控制了foo/spec/dummy db状态,我会测试好像之前的安装一样.

示例引擎
https://github.com/twinge/questionnaire_engine/tree/engine2