5

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
4

3 に答える 3

4

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
于 2013-01-08T14:17:44.153 に答える
1

存在しないインデックスを削除しています。常に次の順序を使用してください。

1)rake db:create

2)rake db:migrate

また、発生しているエラーのコンテキストでは、それがrake db:migrate VERSION=0実行しようとしている場合、およびインデックス作成が以前になかったため、エラーが発生する場合は、すべての移行を削除することを忘れないでください。

またdatabase.yml、mysqlの設定を含むファイルの資格情報、特にとの設定が間違っているとusername思われますpassword。確認して修正してから、移行を行ってください。

于 2013-01-08T14:15:02.433 に答える
0

推測 1. 他の VERSTION に戻ることはできません (ターミナルでは常にエラーが表示されます)。2. 「rake db:rollback」もできません。 3. 「rake db:migrate down」もできません。4. MySQL を使用しています。

深呼吸して、代わりにこれをやってみてください。

A. ターミナル アプリケーションを開き、これを入力します。

rake db:drop

その後、データベースを調べてみてください。「あなたのデータベース」があってはなりません。

B. MySQL 用のデータベースを再作成する (MySQL コマンドを直接使用するか、Rake コマンドをフォローアップする)

CREATE DATABASE database_name;

レーキ用

rake db:create

ユージーン氏が上で答えたように。

C. 移行を行い、ターミナルに移動してこれを入力します。

rake db:migrate

その後、データベースにログインして、そのアクティビティを確認する必要があります。

于 2015-08-01T05:55:03.817 に答える