【问题标题】:How to load db rake tasks in rails 3.2.9 engine如何在 rails 3.2.9 引擎中加载 db rake 任务
【发布时间】:2012-11-03 11:50:17
【问题描述】:

我们正在开发 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'

列出可用的 rake 任务:

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:migrate。问题是如何将 db 任务加载回 rake。

【问题讨论】:

  • bundle exec rake db:migrate 有机会吗?
  • 与 bundle exec 没有区别。尝试在 spec/dummy 下运行 rake db:migrate 并且它通过而没有抛出错误。但是 /spec/dummy/db/ 下的 schema.rb 仍然是空的。有点不对劲。
  • 跳过测试导致了问题。要在引擎根目录中启用 rake db:migrate,需要使用以下命令创建引擎: rails plugin new my_engine --mountable --spec-path=spec/dummy

标签: ruby-on-rails ruby-on-rails-3.2 rake rake-task rails-engines


【解决方案1】:

我已经在我的引擎文件夹中输入了 spec/dummy 并且刚刚运行了 rake db:migrate plus 相同的测试环境,并添加了 db/schema.rb。 但我之前必须手动添加 spec/dummy/db 文件夹。

【讨论】:

    【解决方案2】:

    这是预期的行为。请记住,它是一个可安装引擎。它没有自己的环境。您需要将其安装到 Rails 应用程序(不是引擎,而是实际应用程序)。引擎没有任何数据库。它使用在其安装的父应用程序中定义的数据库。所以很明显你的 db:migrate 不会工作。

    在您的父应用中为引擎执行以下操作:

    1. 使用 :path 或 :git 选项将您的引擎安装在 Rails 应用程序的 Gemfile 中,就像另一个引擎一样

      gem 'engine_name', :path=>'path/to/engine/directory'

    2. bundle install

    3. rake engine_name:install:migrations

    4. rake db:migrate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多