2013-01-08 15 views
5

Śledzę Lynda ruby ​​na tutorialu rails. Uruchomiłem już kod "rake db: migrate" po kilku nieudanych próbach. Następnie powiedziano mi, aby uruchomił "rake db: migracja VERSION = 0". To znowu daje mi błędy, tym razem nie mogę tego naprawić. Próbowałem ostatniej nocy i dziś rano bez skutku.rake db: migrate VERSION = 0 tabela nie istnieje

Pamiętaj, że odpowiadając, jestem nowy w kodowaniu, więc proszę wyjaśnij, w jaki sposób początkujący może to zrozumieć.

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) 

A oto plik 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 

Odpowiedz

1

Usuwasz indeks, który nie istnieje. Zawsze należy używać następującej kolejności:

1) rake db: create

2) rake db: migrować

również w kontekście błędu otrzymujesz pamiętać, rake db:migrate VERSION=0 usunie wszystkie migracje, jeśli to starasz się zrobić, a ponieważ indeksowanie nie było wcześniej, więc to będzie poprzez błędu ..

podejrzewam też, że plik, który zawiera ustawienia dla mysql database.yml jest o złych poświadczeń, zwłaszcza ustawienie username i password. Sprawdź i popraw to, a następnie wykonaj migracje.

+0

Dziękuję. Całkowicie zgadzam się z tym, co powiedziałeś, ale próbowałem krok po kroku wykonać samouczek. Wszystko działa poprawnie. –

+0

Dobrze, dobrze wiedzieć, że to zadziałało. Przyjmij również odpowiedzi dla tych, które rozwiązały problemy, które otrzymałeś, ponieważ pomoże to innym znaleźć to, czego chcą później w przypadku tego samego rodzaju problemów. Dzięki. –

+0

Odpowiedź Eugene'a poniżej pomogła – Anwar

4

rake db: migrować VERSION = 0 wycofywania wszystkim migracja

błąd wyraźnie powiedziane

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

Podejrzewam, że rzeczywiście próbuje wycofać migrację, że nigdy nie był stosowany tak, że indeks nie istnieje. Albo wprowadzasz zmiany w migracji po jej zastosowaniu. Moja sugestia zostanie porzuca bazę danych, ponownie tworzy i stosuje całą migrację.

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

Dziękuję. Po uruchomieniu komend musiałem ponownie utworzyć bazę danych simple_cms_development, a następnie wykonać te polecenia i działa idealnie. –

0

Guess 1. Nie można wrócić do innych VERSTION (zawsze pokazuje błąd na terminalu). 2. Nie można również "zgarnąć db: rollback" 3. Nie można również "zgrabiać db: migrować w dół". 4. Używasz MySQL.

Weź głęboki oddech, spróbuj to zrobić.

A. Otwórz aplikację Terminal i wpisz ją.

rake db:drop 

Po tym, spróbuj szukać w bazie danych. Nie może istnieć "twoja baza danych".

B. Ponowne utworzenie bazy danych (MySQL Użyj polecenia bezpośrednio lub śledzić na komendę Rake) MySQL

CREATE DATABASE database_name; 

dla Rake

rake db:create 

jak Pan Eugeniusz odpowiedział powyżej.

C. Wykonaj migrację, przejdź do Terminal i wpisz to.

rake db:migrate 

Po tym należy zalogować się do bazy danych, aby sprawdzić wszelkie działania na jej temat.

Powiązane problemy