Как установить схему базы данных из плагина Rails 3 в другой плагин
Я пишу плагин Rails 3, который использует другой плагин Rails 3, который я недавно написал. Давайте назовем их июль и август. Так что в августовской гемспек я добавляю строку:
s.add_dependency "july", "~> 0.0.1"
и я бегу bundle install
, Затем я создаю несколько моделей и приспособлений. Далее мне нужно перенести базу данных:
$ cd test/dummy
$ rake august:install:migrations
$ rake db:migrate
Теперь таблицы August (созданный мной плагин) находятся в базах данных разработки и тестирования, а таблицы за июль - нет. Но в моих августовских таблицах есть внешние ключи к моим июльским таблицам, поэтому, прежде чем я смогу выполнить какие-либо тесты, мне нужно создать июльские таблицы и написать соответствующие фиксаторы. Я бы ожидал бежать rake -T
и посмотреть
rake august:install:migrations
rake july:install:migrations
но я вижу только august
грабли задача Итак, как мне создать таблицы базы данных за июль (кроме создания новой миграции, которая будет нарушать DRY, поскольку я уже сделал это в своей кодовой базе за июль)?
1 ответ
Приложение Dummy должно напрямую зависеть от "июля", чтобы оно загружало грабли "июля". Поэтому мне нужно включить его в Gemfile, а не в gempspec. Однако размещение его в Gemfile не заставит настоящие (не фиктивные) приложения устанавливать в июле, когда я bundle install
после помещения "августа" в их Gemfile / gemspec.
Поэтому мне нужно включить его в обоих местах - в Gemfile для задачи rake (и это может быть в :development
группа), и в gemspec (используя add_dependency
или же add_runtime_dependency
) форсировать установку зависимости. Это решение, но я не понимаю почему.
Я попытался объяснить свои мысли по этому поводу в своем комментарии здесь, но не смог точно определить какую-либо логику, объясняющую эту методологию проектирования. Может ли кто-нибудь объяснить истинную причину?