我们正在开发 3.2.9 的 rails 引擎。引擎生成如下:
rails plugin new rails_engine -mountable --skip-test-unit --dummy-path=spec/dummy
初始设置后,我们可以生成一个模型,就像我们在常规 rails 应用程序中所做的那样:
rails g model post name:string
在 db/migrate/下创建了一个迁移文件。接下来我们在/rails_engine 下做了 db:migrate :
rake db:migrate
它会导致错误:
Don't know how to build task 'db:migrate'
列出可用的耙子任务:
bundle exec rake --tasks
rake build # Build test_itemx-0.0.1.gem into the pkg directory
rake clobber_rdoc # Remove RDoc HTML files
rake install # Build and install test_itemx-0.0.1.gem into system gems
rake rdoc # Build RDoc HTML files
rake release # Create tag v0.0.1 and build and push test_itemx-0.0.1.gem to Rubygems
rake rerdoc # Rebuild RDoc HTML files
它们之间没有db:migration。问题是如何将数据库任务加载回 rake。
这是预期的行为。请记住,它是一个可安装的发动机。它没有自己的环境。您需要将其挂载到 Rails 应用程序(不是引擎,而是实际的应用程序)。引擎没有任何数据库。它使用在其装载它的父应用中定义的数据库。所以很明显你的db:migrate 是行不通的。
在引擎的父应用中执行以下操作:
-
将您的引擎挂载在 rails 应用程序的 Gemfile 中,作为另一个引擎使用 :p ath 或 :git 选项
gem 'engine_name', :p ath=>'path/to/engine/directory'
-
bundle install
-
rake engine_name:install:migrations
-
rake db:migrate
我已经在我的引擎文件夹中输入了spec/dummy,刚刚运行了rake db:migrate plus,用于测试环境,并添加了db/schema.rb。但是我之前必须手动添加规范/虚拟/数据库文件夹。