我正在编写一个Rails3插件,它使用了我最近编写的另一个Rails3插件。我们称它们为7月和8月。所以在奥古斯特的gemspec中,我添加了一行:
s.add_dependency "july", "~> 0.0.1"我运行bundle install。然后我创建了一些模型和夹具。接下来,我需要迁移数据库:
$ cd test/dummy
$ rake august:install:migrations
$ rake db:migrate现在,八月(我正在创建的插件)表在开发和测试数据库中,但七月表不在。但是我的8月表有指向我的7月表的外键,所以在运行任何测试之前,我需要创建7月表并编写适当的fixture。我希望运行rake -T并查看
rake august:install:migrations
rake july:install:migrations但我看到的只是august rake任务。那么我该如何创建7月份的数据库表(除了创建一个新的迁移,这将违反DRY,因为我已经在我的7月份代码库中这样做了)?
发布于 2012-09-21 20:36:52
虚拟应用程序必须直接依赖于“七月”才能加载“七月”的rake任务。所以我需要把它包含在Gemfile中,而不是gempspec中。然而,把它放在Gemfile中并不会强迫真正的(非虚拟的)应用程序在我把“bundle install”放入他们的Gemfile/gemspec之后安装七月。
因此,我需要在两个位置都包含它--在rake任务的Gemfile中(这可以在:development组中),以及在gemspec中(使用add_dependency或add_runtime_dependency),以强制安装依赖项。这就是解决方案,但我不明白为什么。
我试图在我的评论here中解释我对此的想法,但我真的不能准确地指出任何解释这种设计方法的逻辑。有人能解释一下真正的原因吗?
https://stackoverflow.com/questions/12518232
复制相似问题