2013-01-08 31 views
5

我正在關注Lynda ruby​​ on rails教程。在幾次嘗試失敗後,我已經運行了代碼「rake db:migrate」。然後我被告知運行「rake db:migrate VERSION = 0」。這再次給我錯誤,這次我無法修復它。我昨天晚上試了一下,今天早上無濟於事。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 

回答

1

您正在刪除不存在的索引。始終使用下面的命令:

1)耙分貝:創建

2)耙分貝:遷移

另外在你所得到的錯誤的情況下,請記住rake db:migrate VERSION=0將刪除所有遷移,如果這就是你正在嘗試做,因爲索引是不存在的所以它會通過一個錯誤..

我也懷疑你的database.yml文件包含設置的MySQL是有錯誤的憑據,特別是設置爲usernamepassword。檢查並糾正它,然後進行遷移。

+0

謝謝。我完全同意你的意見,但我只是試圖按照教程一步一步。一切正常。 –

+0

好吧,好吧,知道它爲你工作。也接受那些解決了你所得到的問題的答案,因爲這將幫助其他人找到他們以後想要的相同類型的問題。謝謝。 –

+0

Eugene的回答如下幫助 – Anwar

4

耙分貝:遷移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 
+0

謝謝。運行命令後,我不得不再次創建數據庫simple_cms_development,然後執行這些命令,它的工作原理非常完美。 –

0

猜測 1.你不能跳回到其他VERSTION(它總是顯示在終端的錯誤)。 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 

之後,您應該登錄到您的數據庫檢查其任何活動。