【问题标题】:rake db:migrate error tablesrake db:迁移错误表
【发布时间】:2015-12-17 16:23:10
【问题描述】:

我正在尝试运行 rake db:migrate,但在控制台中收到错误消息。

好像我正在创建一个已经存在的表,但我不知道如何删除旧表,或者重置数据库以重新开始。

我没有任何用户,因此删除或从头开始不会成为问题。

create_table(:users) rake 中止! StandardError:有一个错误 发生,此迁移和所有后续迁移均已取消:

SQLite3::SQLException: 表“users”已经存在:CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar(255) DEFAULT '' NOT NULL, "encrypted_pa​​ssword" varchar(255) DEFAULT '' NOT NULL, "reset_password_token" varchar(255), “reset_password_sent_at”日期时间,“remember_created_at”日期时间, "sign_in_count" 整数 DEFAULT 0 NOT NULL, "current_sign_in_at" 日期时间,“last_sign_in_at” 日期时间,“current_sign_in_ip” varchar(255),“last_sign_in_ip” varchar(255),“created_at”日期时间, “updated_at”日期时间) /Users/jovanhernandez/.rvm/gems/ruby-2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `初始化'

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    如果您不介意擦除数据,您可以运行

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

    这应该可以解决它。否则,您可以暂时注释掉导致迁移中更改(或升级)方法出现问题的部分内容,然后运行迁移。迁移运行后,取消注释迁移。

    这样做可以让您接受迁移是最新的。

    【讨论】:

    • 我试过这个序列,当我 rake db:migrate 时仍然在控制台中得到这个...rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL/Users/jovanhernandez/.rvm/gems/ruby-2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in initialize'`
    • 现在您有 2 个不同的错误消息,哪一个是最新的?一个在此评论中,一个在您编辑的问题中
    • 抱歉,这种情况很不稳定,所以我按照上述步骤操作,删除了我的旧迁移,然后创建了新用户。现在这是错误:-- change_table(:users) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL/Users/jovanhernandez/.rvm/gems/ruby-2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in initialize'` 当前侧边栏显示:imgur.com/9FXbPq1
    • 迁移看起来如何?
    • 我在 stacksocial 中格式化代码时遇到问题,所以这里是一个链接屏幕截图。我还将尝试复制粘贴以下代码:imgur.com/CXX3k8q 编辑:代码太长,无法复制粘贴。对不起,希望屏幕截图就足够了。感谢您的帮助。
    【解决方案2】:

    您可以使用重置数据库

    $ rake db:reset
    

    或者,如果您想撤消迁移,您可以使用

    $ rake db:rollback
    

    或者如果你想更新你的表,你可以在你的迁移文件中将它从 create_table 更改为 change_table

    create_table :users do |t|
    

    change_table(:users) do |t|
    

    【讨论】:

      【解决方案3】:

      看起来您没有任何用户迁移,但您有迁移以更改用户表。意味着您正在尝试更改用户表而不存在它。如果您有架构文件,那么您可以使用 rake 从那里加载您的数据库db:schema:dump 命令。

      【讨论】:

        【解决方案4】:

        您已经创建了 users 表。看起来迁移已经运行,无需再次运行。

        【讨论】:

        • SQLite 是否与此错误有关?这就是我得到的。我试过这个序列,当我 rake db:migrate...rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL/Users/jovanhernandez/.rvm/gems/ruby-2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in initialize'`
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        • 2014-07-10
        • 2016-01-19
        • 2011-04-29
        • 2012-06-16
        • 2011-11-06
        相关资源
        最近更新 更多