Rails:如何删除挂起的迁移

时间:2015-08-05 21:43:52

标签: ruby-on-rails ruby migration

我目前正在关注ruby on rails教程:http://guides.rubyonrails.org/getting_started.html

我正在尝试将数据保存到数据库中。但是,当我运行时:rails server我收到以下错误:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development

我看过其他文章,当我跑步时:

bin/rake db:migrate 

我得到rake aborted!

跑完后:

rake db:abort_if_pending_migrations....

我明白了:

You have 1 pending migration:
20150805200129 CreateDatabases

SQLite3::SQLException: table "databases" already exists:

它告诉我运行rake db:migrate再次启动。

它似乎已经存在。有没有办法取消挂起的迁移?

5 个答案:

答案 0 :(得分:20)

有时,即使删除本地开发数据库也不是一个好主意。 有更好的方法可以删除/销毁Rails应用程序中的特定迁移。

您可以使用rails d migration命令销毁特定的迁移:

rails d migration MigrationName

要撤消与特定迁移相对应的更改,您可以使用db:migrate:down方法,如下所示:

rake db:migrate:down VERSION=XXX

有时,事情会变得更加混乱,在这种情况下,另一个方便的事情是查看数据库中的schema_migrations表,其中包含保存在其中的version的所有迁移。

您可以从此表中删除特定的迁移,如下所示:

delete from schema_migrations WHERE version = VERSION;

如果您不希望再次出现迁移。

答案 1 :(得分:12)

您的迁移可能在中途失败(因此它创建了表格,但没有完成)。

您只是使用开发环境,所以只需删除数据库并从头开始重建它就可以了:

rake db:drop
rake db:create
rake db:migrate

答案 2 :(得分:2)

如果您像我一样并在Rails之外维护数据库结构,则只需从db / migration中删除迁移文件即可。当我使用rails generate命令创建模型类时,我在OP的问题中得到了错误,忘了它还创建了一个迁移文件。

如果您依赖Rails维护数据库结构,请不要使用此方法!

通过使用以下命令从数据库构建Rails结构文件,使我的Rails结构文件保持最新:

bundle exec rake db:structure:dump

答案 3 :(得分:1)

我不鼓励删除数据库并从头开始,尤其是当您已经拥有数据库中的数据时。

我的方法是先迁移,然后回滚。之后,您可以安全地删除迁移文件。所以程序如下。

rails db:migrate
rails db rollback
rm db/migrate/your_last_migration_file.rb

答案 4 :(得分:-1)

如果要还原错误的迁移,可以使用以下命令删除整个数据库:

rake db:drop

然后手动删除迁移文件(这将在您重新创建时损坏数据库,因为模式迁移也将被删除)。

然后运行

rake db:migrate

如果有数据要播种,那么也可以运行

rake db:setup