【问题标题】:Rails 6, Schema file not matching migration files after switching Git branchRails 6,切换Git分支后架构文件与迁移文件不匹配
【发布时间】:2020-12-18 09:13:48
【问题描述】:

Rails 6,使用 sqlite3 进行开发。

我的 schema.rb 有一个不应该存在的文件:没有迁移文件(在 current git 分支上)表示应该生成它。通过它的名字,我可以看到它来自我放弃的早期分支,并且没有回去尝试不同的方法来构建我的 rails 应用程序。

仔细检查:当我尝试在 Rails 控制台中访问表时出现名称错误,因此它仅存在于架构文件中,而不存在于数据库本身中。

我可以强制 rails 运行和/或确认当前架构与迁移文件匹配,如果不匹配,是否会运行迁移?

编辑/更新: 我需要澄清一下,我有 6 个迁移文件,我去确认它们都不是来自之前废弃的分支。

(管理员是有问题的表) ActiveRecord::Base.connection.tables 在 rails 命令行中生成: ["schema_migrations", "ar_internal_metadata", "events", "admins", "details"] 当我做Event 时,我会得到列名和类型。但是当我做管理员时,我得到了

Traceback (most recent call last):
        1: from (irb):3
NameError (uninitialized constant Admin)

所以问题是:如何正确地将数据库重置为

【问题讨论】:

  • 如果我理解正确你没有迁移,所以 schema.rb 应该是空的,但它不是......并且你想解决这个问题:获取丢失的迁移或确保数据库又是空的,架构 rb 也是?
  • (将编辑初始问题)抱歉没有澄清。我有 6 个迁移文件。我越来越怀疑这个问题是由 GIT 捕获的,因为它在忽略文件中:/db/*.sqlite3 我认为这意味着它不会将数据库添加到存储库中,这是有道理的,因为我必须运行 db :migrate 在生产服务器(heroku)上。

标签: ruby-on-rails git-branch rails-migrations schema.rb


【解决方案1】:

schema.rb 文件是从数据库的当前状态自动生成的,所以只需运行rails db:migrate 重新生成 schema.rb 文件

【讨论】:

  • 我尝试了您的建议,但由于所有迁移都已运行,终端没有响应。做了更多的研究并会更新问题)感谢您的建议。
【解决方案2】:

running rails db:migrate:reset removed 似乎已经解决了这个问题: 我的架构文件中没有“管理员”,并且在 rails 命令行中运行 ActiveRecord::Base.connection.tables 时不会显示。

我相信这是由 Git 引起的,因为它在文件中有数据库:/db/*.sqlite3,并且“管理员”是在我之前放弃且从未合并的分支上创建的。所以它被保存在数据库中,但是当我返回并在时间轴上创建一个新分支时,迁移文件被删除了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多