2013-01-08 9 views
5

Ich folge Lynda Ruby on Rails Tutorial. Ich habe nach mehreren erfolglosen Versuchen den Code "rake db: migrate" schon ausgeführt. Ich wurde dann aufgefordert, "rake db: migrate VERSION = 0" auszuführen. Das gibt mir wieder Fehler, dieses Mal kann ich es nicht beheben. Ich habe letzte Nacht und heute Morgen vergeblich versucht.Rake db: migrieren VERSION = 0 Tabelle existiert nicht

Denken Sie daran, wenn ich antworte, bin ich neu in der Codierung, also erklären Sie bitte in einer Weise, die ein Neuling verstehen könnte.

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) 

Und hier ist die rb-Datei.

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 

Antwort

1

Sie entfernen den Index, der nicht existiert. Verwenden Sie immer die folgende Reihenfolge:

1) rake db: create

2) rake db: migrate

Auch im Rahmen der Fehler, den Sie bekommen, denken Sie daran rake db:migrate VERSION=0 alle Migrationen entfernen, wenn das, was Sie versuchen zu tun, und da die Indizierung war nicht vorher, also wird es durch einen Fehler ..

Ich vermute auch, dass Ihre database.yml Datei, die Einstellung für die mysql enthält falsche Anmeldeinformationen, vor allem die Einstellung für username und password. Überprüfen und korrigieren Sie sie und führen Sie dann Migrationen durch.

+0

Vielen Dank. Ich stimme dem überein, was Sie gesagt haben, aber ich habe nur versucht, Schritt für Schritt dem Tutorial zu folgen. Funktioniert alles. –

+0

gut ok gut zu wissen, dass es für Sie gearbeitet hat. Akzeptiere auch die Antworten für diejenigen, die die Probleme gelöst haben, die du bekommen hast, da dies anderen helfen wird, zu finden, was sie später für die gleiche Art von Problemen wollen. Vielen Dank. –

+0

Eugenes Antwort unten half – Anwar

4

rake db: migrate VERSION = 0 Rollback alle Migration

Fehler klar gesagt

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

Ich vermute, Sie tatsächlich versuchen, Migration rückgängig zu machen, die nie angewandt wurde, so dass der Index nicht existiert. Oder Sie ändern die Migration, nachdem Sie sie bereits angewendet haben. Mein Vorschlag wird fallen die Datenbank, erstellen und alle Migration erneut anwenden.

rake db:drop 
rake db:create 
rake db:migrate 
+0

Danke. Nachdem ich die Befehle ausgeführt hatte, musste ich die Datenbank simple_cms_development erneut erstellen und dann diese Befehle ausführen und es funktioniert perfekt. –

0

Raten 1. Sie nicht zurück zu anderer VERSTION springen können (es zeigt immer Fehler auf Terminal). 2. Sie können auch nicht 'rake db: rollback' 3. Sie können nicht 'Rake db: migrieren' auch. 4. Sie verwenden MySQL.

Atmen Sie tief durch, versuchen Sie es stattdessen.

A. Öffnen Sie die Anwendung Terminal und geben Sie diese ein.

rake db:drop 

Danach versuchen Sie in Ihrer Datenbank suchen. Es darf keine "Ihre Datenbank" geben.

B. Re-create-Datenbank (MySQL Verwenden Befehl direkt oder über Rake Befehl folgen) für MySQL

CREATE DATABASE database_name; 

für Rake

rake db:create 

als Mr. Eugene oben beantwortet.

C. Machen Sie die Migration, gehen Sie zu Terminal und geben Sie diese ein.

rake db:migrate 

Danach sollten Sie sich in Ihre Datenbank einloggen, um alle Aktivitäten auf ihrem zu überprüfen.

Verwandte Themen