我刚刚加入了一个开发Rails引擎的项目,该项目也有一个用于测试的虚拟应用程序。
foo/
foo/spec/dummy/
中有相同的迁移
foo/db/migrate/
foo/spec/dummy/db/migrate/
如果我从虚拟应用程序中rake db:migrate
,一切都很好。如果我从引擎(当前目录 = foo)执行相同的操作,则会收到有关具有相同名称的多个迁移的错误。
问题 1)耙子文件无聊了吗?(db:migrate
应该递归到虚拟应用程序吗?
问题 2)迁移是否应该只在一个目录中?如果是,是哪一个?
我们使用的是 Rails 3.2.9,ruby 1.9.3p194。
问题 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 上。事实上,我不对虚拟人的数据库/迁移或数据库/模式进行版本控制。
为什么?我使用虚拟应用程序,确保完全安装我的引擎 100%。因此,如果我版本控制 foo/spec/dummy db 状态,我将像以前安装一样进行测试。
示例引擎
https://github.com/twinge/questionnaire_engine/tree/engine2
要测试虚拟应用,您可以使用以下命令为测试 ENV 运行引擎迁移:
RAILS_ENV=test rake db:migrate