You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Devise的Rails引擎迁移后,schema.rb为何生成在test/dummy/db而非引擎db目录?

问题原因

在Rails引擎目录下执行rails db:migrate时,默认会关联到引擎内置的test/dummy测试应用——这是Rails引擎的默认行为,dummy应用用于测试引擎功能,因此迁移会作用于dummy的数据库,schema.rb自然生成在test/dummy/db目录下。

Rails引擎本身并不需要维护独立的schema.rb,因为引擎的数据库表最终是要被宿主应用的数据库整合的,正常流程是由宿主应用加载引擎的迁移并执行。

解决方案

如果你确实需要在引擎目录下生成专属的schema.rb,可以按以下步骤操作:

  • 添加引擎专属的数据库配置
    在引擎根目录创建config/database.yml,配置独立的数据库实例:

    development:
      adapter: sqlite3
      database: db/development.sqlite3
    test:
      adapter: sqlite3
      database: db/test.sqlite3
    
  • 指定配置执行迁移
    执行迁移时,明确指定使用引擎的数据库配置:

    rails db:migrate --config=config/database.yml
    

    或者通过环境变量指定:

    DATABASE_URL=sqlite3://./db/development.sqlite3 rails db:migrate
    
  • 生成schema.rb
    迁移完成后,执行以下命令生成引擎目录下的schema.rb:

    rails db:schema:dump --config=config/database.yml
    
补充说明

如果你的核心需求是让宿主应用使用引擎的User模型,无需在引擎目录生成schema.rb:

  • 确保引擎的迁移文件放在my_engine/db/migrate目录下
  • 在宿主应用执行rails db:migrate,Rails会自动加载引擎的迁移并执行,宿主应用的db/schema.rb会包含my_engine_users表

内容的提问来源于stack exchange,提问作者Maxime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:15:35