【问题标题】:db:migrate error during rake on Rails 4.0.0db:Rails 4.0.0 上 rake 期间的迁移错误
【发布时间】:2014-01-21 08:29:05
【问题描述】:

在 Rails 4.0.0、ruby 1.9.3p392(2013-02-22 修订版 39386)[x86_64-darwin10.8.0] 中使用 Rake 10.1.1 处理项目

我正在为 Rails 中的一个类开发应用程序,我犯了一个错误并删除了在 Git 中所做的更改。当我去重做项目并运行 rake DB 迁移时,我收到以下错误消息:

Joses-MacBook-Air:crumblr JRV$ rails generate migration CreateHearts Post_id:integer
  invoke  active_record
  create    db/migrate/20140120235500_create_hearts.rb
Joses-MacBook-Air:crumblr JRV$ bundle exec rake db:migrate
==  CreateHearts: migrating ===================================================
-- create_table(:hearts)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "hearts" already exists: CREATE TABLE "hearts" ("id" INTEGER        PRIMARY KEY AUTOINCREMENT NOT NULL, "Post_id" integer) /usr/local/rvm/gems/ruby-1.9.3-  p392/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize'
4.0.0/lib/active_record/railties/databases.rake:42:in `block (2 levels) in <top    (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

如何摆脱旧的表引用?

【问题讨论】:

  • 你不是很清楚。 “旧表引用”是指您想要更新 schema.rb 以匹配现有数据库中的内容,还是想要让数据库进入您的代码库所期望的状态?您是否更改了迁移的标识符(时间戳)?数据库应该跟踪上次运行的迁移。

标签: ruby-on-rails ruby git ruby-on-rails-4


【解决方案1】:

您可以使用几个命令:

rake db:rollback 将回滚最新的迁移

rake db:rollback STEP=3 允许您回滚 1 次以上的迁移(本例中为 3 次)

rake db:reset 将删除数据库,重新创建它并将当前架构加载到其中。

如果你想回滚,然后再次迁移回来,你可以使用

rake db:migrate:redo STEP=3 回滚 3 次迁移并重做迁移

http://guides.rubyonrails.org/migrations.html

【讨论】:

  • 这些有帮助,但最终起作用的命令是 rake db:reset。问题是它删除了我的帖子,但它们是测试项目。
  • 还有其他命令,如rake db:seed 运行db/seed.rb 文件或rake db:schema:load 以将架构加载到当前数据库中。看看这个链接是否有助于进一步解释:stackoverflow topic
猜你喜欢
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多