我目前正在关注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再次启动。
它似乎已经存在。有没有办法取消挂起的迁移?
答案 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