Rails: 如何删除挂起的迁移
Rails: How to delete a pending migration
我目前正在关注 rails 教程中的 ruby: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:
它只是告诉我 运行 耙 db:migrate 重新开始。
好像已经存在了。有没有办法取消挂起的迁移?
您的迁移可能中途失败了(因此它创建了 table,但没有完成)。
您只是在使用开发环境,因此可以删除数据库并从头开始重建它:
rake db:drop
rake db:create
rake db:migrate
有时,甚至删除本地开发数据库也不是一个好主意。
delete/destroy 在您的 Rails 应用程序中进行特定迁移有更好的方法。
您可以使用 rails d migration
命令来销毁特定的迁移:
rails d migration MigrationName
要撤消与特定迁移对应的更改,您可以使用 db:migrate:down
方法,如下所示:
rake db:migrate:down VERSION=XXX
有时,事情可能会变得更加混乱,在这种情况下,另一件方便的事情是查看数据库中的 schema_migrations
table,其中包含所有迁移及其 version
保存在里面。
您可以从这个 table 中删除特定迁移,如下所示:
delete from schema_migrations WHERE version = VERSION;
如果您不想再出现该迁移。
如果你想恢复错误的迁移,你可以使用这个删除整个数据库:
rake db:drop
然后手动删除迁移文件(这不会在您重新创建时破坏数据库,因为架构迁移也会被删除)。
然后运行
rake db:migrate
如果有数据要播种,那么运行这也是
rake db:setup
如果您像我一样在 Rails 之外维护您的数据库结构,您可以从 db/migration 中删除迁移文件。当我使用 rails generate 命令创建模型 class 时,我在 OP 的问题中遇到了错误,忘记了它还创建了一个迁移文件。
如果您依赖Rails维护您的数据库结构,请不要使用此方法!
我通过使用以下数据库从数据库构建我的 Rails 结构文件来保持最新:
bundle exec rake db:structure:dump
我不鼓励删除数据库并从头开始,尤其是当数据库中已有数据时。
我的做法是先迁移,再回滚。之后您可以安全地删除迁移文件。所以程序如下。
rails db:migrate
rails db rollback
rm db/migrate/your_last_migration_file.rb
我目前正在关注 rails 教程中的 ruby: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:
它只是告诉我 运行 耙 db:migrate 重新开始。
好像已经存在了。有没有办法取消挂起的迁移?
您的迁移可能中途失败了(因此它创建了 table,但没有完成)。
您只是在使用开发环境,因此可以删除数据库并从头开始重建它:
rake db:drop
rake db:create
rake db:migrate
有时,甚至删除本地开发数据库也不是一个好主意。 delete/destroy 在您的 Rails 应用程序中进行特定迁移有更好的方法。
您可以使用 rails d migration
命令来销毁特定的迁移:
rails d migration MigrationName
要撤消与特定迁移对应的更改,您可以使用 db:migrate:down
方法,如下所示:
rake db:migrate:down VERSION=XXX
有时,事情可能会变得更加混乱,在这种情况下,另一件方便的事情是查看数据库中的 schema_migrations
table,其中包含所有迁移及其 version
保存在里面。
您可以从这个 table 中删除特定迁移,如下所示:
delete from schema_migrations WHERE version = VERSION;
如果您不想再出现该迁移。
如果你想恢复错误的迁移,你可以使用这个删除整个数据库:
rake db:drop
然后手动删除迁移文件(这不会在您重新创建时破坏数据库,因为架构迁移也会被删除)。
然后运行
rake db:migrate
如果有数据要播种,那么运行这也是
rake db:setup
如果您像我一样在 Rails 之外维护您的数据库结构,您可以从 db/migration 中删除迁移文件。当我使用 rails generate 命令创建模型 class 时,我在 OP 的问题中遇到了错误,忘记了它还创建了一个迁移文件。
如果您依赖Rails维护您的数据库结构,请不要使用此方法!
我通过使用以下数据库从数据库构建我的 Rails 结构文件来保持最新:
bundle exec rake db:structure:dump
我不鼓励删除数据库并从头开始,尤其是当数据库中已有数据时。
我的做法是先迁移,再回滚。之后您可以安全地删除迁移文件。所以程序如下。
rails db:migrate
rails db rollback
rm db/migrate/your_last_migration_file.rb