【问题标题】:Rails: Migration ErrorsRails:迁移错误
【发布时间】:2016-07-15 14:42:16
【问题描述】:

当我转到我的 http://localhost:3000/ 时,我得到以下信息:

ActiveRecord::PendingMigrationError

正在等待迁移。要解决此问题,请运行:bin/rails db:migrate RAILS_ENV=development

提取来源:

# Raises <tt>ActiveRecord::PendingMigrationError</tt> error if any migrations are pending.
def check_pending!(connection = Base.connection)
  raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection)
end
def load_schema_if_pending!

另外,当我尝试在控制台中输入heroku run rake db:migrate 时,它说:

StandardError:发生错误,此迁移和所有后续迁移 取消:PG::DuplicateColumn:错误:关系的列“电子邮件” “用户”已经存在

我是 ruby​​ 的新手,并关注了 Mackenzie Child 的 devise tutorial。这是我完成第一个 ruby​​ 应用程序的最后一步。

我很兴奋,期待您的帮助! :)

【问题讨论】:

    标签: ruby-on-rails ruby migration


    【解决方案1】:

    在您的控制台中运行rake db:migrate 确保你在项目目录中

    【讨论】:

    • 我可能会补充一点,运行 heroku run rake db:migrate 在 Heroku 上运行迁移,而不是在您的本地主机中。诸如“PG::DuplicateColumn: ERROR: column "email" of relationship "users" already exists”之类的错误通常来自修改迁移名称或版本。
    • 不幸的是它没有帮助。当我这样做时,我得到:“rake aborted!StandardError:发生错误,这个和所有以后的迁移都取消了:”Ater that:“SQLite3::SQLException:重复的列名:电子邮件:ALTER TABLE“用户”添加“电子邮件” varchar DEFAULT '' NOT NULL" 然后是关于 SQLite3 和 activerecord 的数百行
    【解决方案2】:

    您使用设计生成器为您的 User 模型准备迁移。您的模型之前已经存在并且已经有一个email 列。设计生成的迁移尝试创建相同的列,但预期会失败,这就是您看到错误的原因:

    PG::DuplicateColumn: 错误:关系“用户”的“电子邮件”列已存在

    要解决这个问题,只需打开您的设计生成的迁移并删除如下所示的行:

    t.string :email...
    

    然后运行rake db:migrate

    更新

    由于您的数据库似乎与您的迁移不同步,因此建议从头开始重新创建它。

    运行

    rake db:drop db:create db:migrate
    

    请注意,所有数据库数据都将被销毁。

    【讨论】:

    • 我试过了,rake db:migrate 后仍然报错,看起来像这样:rake aborted! StandardError:发生错误,此迁移和所有后续迁移已取消:SQLite3::SQLException:重复列名:encrypted_pa​​ssword:ALTER TABLE "users" ADD "encrypted_pa​​ssword" varchar DEFAULT '' NOT NULL /Users/matthiascordes/.rvm/gems/ ruby-2.3.1/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in initialize' /Users/matthiascordes/.rvm/gems/ruby-2.3.1/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in new' ...等等
    • 还有这个:SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "encrypted_pa​​ssword" varchar DEFAULT '' NOT NULL
    • 我将所有内容都推送到了 github(提交)。有没有一种简单的方法可以从那里恢复所有内容?
    • 确保这首先在本地工作,当它确实推送具有正确代码状态的新提交时。
    猜你喜欢
    • 2011-07-28
    • 2015-04-04
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2016-10-02
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多