如何从另一个插件中的Rails 3插件安装数据库模式

时间:2012-09-20 18:01:49

标签: ruby-on-rails-3 ruby-on-rails-plugins

我正在编写一个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月代码库中完成了这个)?

1 个答案:

答案 0 :(得分:0)

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

所以我需要在两个地方都包含它 - 在rake任务的Gemfile中(这可以在:development组中)和gemspec中(使用add_dependency或{{ 1}})强制安装依赖项。这是解决方案,但我不明白为什么。

我试着在我的评论here中解释我的想法,但实际上无法确定解释这种设计方法的任何逻辑。有人可以解释一下这个真正的原因吗?