我正在编写一个Rails 3插件,它使用了我最近编写的另一个Rails 3插件。我们称他们为7月和8月。所以在8月份的gemspec中,我添加了一行:
s.add_dependency "july", "~> 0.0.1"
我运行bundle install
。然后我创建了一些模型和固定装置。接下来我需要迁移数据库:
$ cd test/dummy
$ rake august:install:migrations
$ rake db:migrate
现在,8月(我正在创建的插件)表位于开发和测试数据库中,但7月表却没有。但是我的August表有7月表的外键,所以在我可以运行任何测试之前,我需要创建7月表并编写适当的灯具。我希望运行rake -T
并查看
rake august:install:migrations
rake july:install:migrations
但我看到的只是august
rake任务。那么我该如何创建7月数据库表(除了创建一个新的迁移,这会违反DRY,因为我已经在7月代码库中完成了这个)?
答案 0 :(得分:0)
虚拟应用程序必须直接依赖于“7月”才能加载“7月”的佣金任务。所以我需要将它包含在Gemfile中,而不是gempspec中。但是,在Gemfile / gemspec中加入“august”后,将它放入Gemfile并不会强制我在bundle install
安装7月份的真实(非虚拟)应用程序。
所以我需要在两个地方都包含它 - 在rake任务的Gemfile中(这可以在:development
组中)和gemspec中(使用add_dependency
或{{ 1}})强制安装依赖项。这是解决方案,但我不明白为什么。
我试着在我的评论here中解释我的想法,但实际上无法确定解释这种设计方法的任何逻辑。有人可以解释一下这个真正的原因吗?