0

我正在编写一个 Rails 3 插件,它使用我最近编写的另一个 Rails 3 插件。我们称它们为七月和八月。所以在 8 月的 gemspec 中,我添加了一行:

s.add_dependency "july", "~> 0.0.1"

我跑bundle install。然后我创建了一些模型和固定装置。接下来我需要迁移数据库:

$ cd test/dummy
$ rake august:install:migrations
$ rake db:migrate

现在,August(我正在创建的插件)表在开发和测试数据库中,但 July 表不在。但是我的八月表有我七月表的外键,所以在我可以运行任何测试之前,我需要创建七月表并编写适当的夹具。我希望跑去rake -T看看

rake august:install:migrations
rake july:install:migrations

但我看到的只是augustrake 任务。那么如何创建 7 月份的数据库表(除了创建一个新的迁移,这将违反 DRY,因为我已经在我的 7 月份代码库中这样做了)?

4

1 回答 1

0

Dummy App 必须直接依赖于“july”才能加载“july”的 rake 任务。所以我需要将它包含在 Gemfile 中,而不是 gempspec 中。bundle install但是,当我在 Gemfile/gemspec 中放入“august”之后,将它放入 Gemfile 不会强制安装真正的(非虚拟)应用程序 7月。

所以我需要在两个地方都包含它——在 Gemfile 中用于 rake 任务(这可以在一个:development组中),并在 gemspec 中(使用add_dependencyor add_runtime_dependency)来强制安装依赖项。这就是解决方案,但我不明白为什么。

我试着在我的评论中解释我对此的想法,并没有真正指出任何解释这种设计方法的逻辑。有人可以解释一下真正的原因吗?

于 2012-09-21T12:36:52.293 回答