【问题标题】:Rails Git Migration Issue With BranchesRails Git 迁移问题与分支
【发布时间】:2019-06-24 20:47:35
【问题描述】:

还是个新手。我正在为 RoR 应用程序开发一项新功能。我创建了一个本地分支并生成了一个迁移。不幸的是,我没有将更改保存到迁移文件,然后运行 ​​db:migrate。想要重新开始,我切换回 master 并从我的 git 中退出,并使用以下命令进行了硬重置(我从未在本地或远程提交分支中的文件):

git fetch --all
git reset --hard origin/master

然后我重新创建了一个本地分支,重新创建了迁移(这次是正确的)并运行了 db:migrate。我收到一个错误,表明该表已存在于数据库中,但是,当我查看 schema.db 时,该表不存在。

我只想回到基于远程 git 的位置。对于它的价值,我在 AWS 上使用 Cloud9 进行开发。谢谢!

【问题讨论】:

  • 只删除错误的表,更新的迁移将创建正确的表。
  • 本地机器中是否还存在迁移文件?运行 rake db:migrate 时生成的任何添加列日志

标签: ruby-on-rails ruby git cloud9 dbmigrate


【解决方案1】:

当您对 git 进行更改时,与数据库无关。一旦您运行像rake db:migrate 这样的 rake 任务来进行数据库更改,一旦您更改分支,它将自动恢复,您必须准备回滚步骤。 (因为迁移中的 down 方法是按照惯例运行的)

您的旧迁移版本与重新创建的新迁移不同,因此应用程序尝试运行迁移文件而不检查表是否存在。

每当您在特定数据库中运行 rake db:migrate 时,它会将迁移版本存储在您的数据库中的 schema_migrations 表中。因此,一次又一次地调用相同的 rake 不会尝试创建具有相同名称的表。在上述情况下,您有不同的迁移文件来创建同一个表,schema_migration 表不知道您是否删除了旧迁移文件的分支或表是否已经存在

所以在你的 Rails 控制台中运行以下命令,

ActiveRecord::Migration.drop_table :table_name

然后运行你的rake db:migrate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2015-08-30
    相关资源
    最近更新 更多