所以我一直在阅读RubyonRails引擎迁移+种子指南似乎为了让种子在引擎上运行,需要使用将它们添加到应用程序中
(使用虚拟应用程序的示例)
将MyEngine::Engine.load_seed
添加到Engine/test/dummy/db/seeds.rb
我的问题是,为什么我们需要这样做——无论如何,它们都应该与主应用程序隔离?(它们不相关,只是在引擎数据库中播种)
注:如果你想要更多的上下文,我已经将设计宝石(/engine)添加到我的引擎中,并且种子数据只是在我的引擎的上下文下创建一个用户,用于登录到其界面
共享引擎的种子数据和模式有两部分:模式迁移和种子数据本身。
作为一个引擎,有两种方法可以在引擎中封装数据库迁移,但要让它们在Rails应用程序中正确运行:
- 将迁移文件物理复制到Rails
db/migrate
目录中 -
修补Rails迁移加载路径以添加引擎迁移目录:
config.paths["db/migrate"]+=config.paths["db/meigrate"]。扩展
。。。在初始值设定项内
您可以在这里找到关于引擎内迁移的精彩讨论:https://blog.pivotal.io/labs/labs/leave-your-migrations-in-your-rails-engines
共享种子数据就不那么优雅了。DB种子数据是从单个db/seeds.rb
文件加载的,因此通过引擎代码包含自定义种子数据需要挂接到种子文件中的引擎代码,例如上面的代码:
MyEngine::Engine.load_seed
没有任何技巧或更简单的方法可以做到这一点。在引擎安装/设置任务中,您可能会自动将代码准备/附加到db/seeds.rb
中。