【问题标题】:rake db:migrate VERSION=0 table does not existrake db:migrate VERSION=0 表不存在
【发布时间】:2013-01-08 14:08:00
【问题描述】:

我正在关注 Lynda ruby​​ on rails 教程。经过几次不成功的尝试后,我已经运行了代码“rake db:migrate”。然后我被告知运行“rake db:migrate VERSION=0”。这再次给了我错误,这次我无法修复它。我昨晚和今天早上都试过了。

请记住,在回答我是编码新手时,请以新手可以理解的方式进行解释。

lexi87$ rake db:migrate VERSION=0
==  AlterUsers: reverting =====================================================
-- remove_index("admin_users", "username")
rake aborted!
An error has occurred, all later migrations canceled:

Index name 'index_admin_users_on_username' on table 'admin_users' does not exist
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/schema_statements.rb:587:in `index_name_for_remove'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/schema_statements.rb:366:in `remove_index'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:466:in `block in method_missing'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:438:in `block in say_with_time'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:438:in `say_with_time'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:458:in `method_missing'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:334:in `method_missing'
/Users/lexi87/Sites/simple_cms/db/migrate/20130108015542_alter_users.rb:14:in `down'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:376:in `down'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:410:in `block (2 levels) in migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:410:in `block in migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:389:in `migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:528:in `migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:720:in `block (2 levels) in migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:777:in `call'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:777:in `ddl_transaction'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:719:in `block in migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:700:in `each'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:700:in `migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:574:in `down'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/migration.rb:555:in `migrate'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.9/lib/active_record/railties/databases.rake:179:in `block (2 levels) in <top (required)>'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/bin/ruby_noexec_wrapper:14:in `eval'
/Users/lexi87/.rvm/gems/ruby-1.9.2-p320/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

这是 rb 文件。

class AlterUsers < ActiveRecord::Migration

  def self.up
    rename_table("users", "admin_users")
    add_column("admin_users", "username", :string, :limit => 25)
    change_column("admin_users", "email", :string, :limit => 100)
    rename_column("admin_users", "password", "hashed_password")
    add_column("admin_users", "salt", :string, :limit => 40)
    puts "*** About to add an index ***"
    add_index("admin_users", "username")
  end

  def self.down
       remove_index("admin_users", "username")
       remove_column("admin_users", "salt")
       remove_column("admin_users", "hashed_password", "password")
       remove_column("admin_users", "email", :string, :default => "", :null => false)
       remove_column("admin_users", "username")
       rename_table("admin_users", "users")
  end

end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    rake db:migrate VERSION=0回滚所有迁移

    错误说清楚

    Index name 'index_admin_users_on_username' on table 'admin_users' does not exist
    

    我怀疑您实际上是在尝试回滚从未应用过的迁移,以便索引不存在。 或者您在应用迁移后对其进行更改。 我的建议是 删除数据库,再次创建并应用所有迁移。

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

    【讨论】:

    • 谢谢。运行命令后,我必须再次创建数据库 simple_cms_development,然后执行这些命令,它可以完美运行。
    【解决方案2】:

    您正在删除不存在的索引。始终使用以下顺序:

    1) 耙分贝:创建

    2) rake db:迁移

    此外,在您遇到错误的情况下,请记住 rake db:migrate VERSION=0 将删除所有迁移,如果您正在尝试这样做,并且由于之前没有索引,所以它会通过错误..

    我还怀疑包含 mysql 设置的 database.yml 文件具有错误的凭据,尤其是 usernamepassword 的设置。检查并更正它,然后进行迁移。

    【讨论】:

    • 谢谢。我完全同意你所说的,但我只是想一步一步地遵循教程。一切正常。
    • 好吧,很高兴知道它对你有用。也接受那些解决了您遇到的问题的答案,因为这将帮助其他人稍后找到他们想要的相同类型问题的答案。谢谢。
    • 尤金的回答有帮助
    【解决方案3】:

    猜 1. 不能跳回其他版本(终端总是显示错误)。 2. 你也不能'rake db:rollback' 3. 你也不能'rake db:migrate down'。 4. 你正在使用 MySQL。

    深呼吸,尝试这样做。

    A.打开终端应用程序,然后输入。

    rake db:drop
    

    之后,尝试查看您的数据库。必须没有“您的数据库”。

    B.重新创建数据库(直接使用 MySQL 命令或跟进 Rake 命令) 对于 MySQL

    CREATE DATABASE database_name;
    

    为耙子

    rake db:create
    

    正如尤金先生在上面回答的那样。

    C.进行迁移,转到终端并输入。

    rake db:migrate
    

    之后,您应该登录到您的数据库以检查其上的任何活动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 2017-02-28
      • 2013-11-17
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多