还是个新手。我正在为RoR应用程序开发一项新功能。我创建了一个本地分支并生成了一个迁移。不幸的是,我没有将更改保存到迁移文件中,然后运行db:migrate。想重新开始,我切换回master并从git重新拉起,并使用以下命令进行了硬重置(我从未在本地或远程提交分支中的文件):
git fetch --all
git reset --hard origin/master
然后我重新建立了一个本地分支,重新创建了迁移(这次正确)并运行了db:migrate。我收到一个错误,指出该表已存在于数据库中,但是,当我在schema.db中查找该表时,该错误不存在。
我要做的就是回到基于远程git的地方。对于它的价值,我正在AWS上使用Cloud9进行开发。谢谢!
答案 0 :(得分:2)
当您对git进行更改时,与数据库无关。一旦运行了rake db:migrate
之类的rake任务来进行数据库更改,更改分支后它将自动恢复,您必须准备回滚步骤。 (因为迁移中的down方法通常是运行的)
您的旧迁移版本与新创建的迁移版本不同,因此应用程序尝试运行迁移文件而不检查表是否存在。
无论何时在特定数据库中运行rake db:migrate
,它都会将迁移版本存储在db的schema_migrations
表中。因此,一次又一次调用相同的rake不会尝试创建具有相同名称的表。在上述情况下,您有不同的迁移文件来创建相同的表,而schema_migration
表不知道您是使用旧的迁移文件删除分支还是表已经存在
因此,请在您的rails控制台中运行以下命令,
ActiveRecord::Migration.drop_table :table_name
然后运行您的rake db:migrate