8

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

foo/
foo/spec/dummy/

有相同的迁移

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

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

Q1) Rakefiles 是不是很无聊?(应该db:migrate递归到虚拟应用程序吗?)

Q2) 迁移应该只在一个目录中吗?如果有,是哪一个?

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

4

1 回答 1

8

问题 1
Rakefile 应该有一个条目来说明规范/虚拟应用程序。例如,

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

这是更详细的示例 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

于 2013-02-07T04:49:32.770 回答