2011-01-15 7 views
3

(作業中の)Rails 3/MySqlアプリケーションを別のコンピュータに複製しようとしています。私はschema.rbとdata.ymlを作成し、次にdb:schema:loadとdb:data:loadを使用しました。テーブルに多数のインデックスがあり、それらを作成しようとして失敗しました。スキーマを生成するためにschema.rbからコメントしなければならなかったので、それらをマイグレーションに入れてみました。元のアプリ!)とレーキはまだ死んだ。ここでエラーメッセージがあります:ここではadd_indexのマイグレーションが「引数が範囲外です。」

O:\Development\myapp>rake db:migrate 
rake aborted! 
An error has occurred, all later migrations canceled: 

argument out of range 

C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `utc' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `each' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `indexes' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:406:in `index_name_exists?' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:343:in `add_index' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:383:in `block in method_missing' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `block in say_with_time' 
C:/Ruby/lib/ruby/1.9.1/benchmark.rb:294:in `measure' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `say_with_time' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:379:in `method_missing'O:/Development/codenotes/db/migrate/20110114212538_add_notes_index.rb:11:in `up' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `block in migrate' 
C:/Ruby/lib/ruby/1.9.1/benchmark.rb:294:in `measure' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `migrate' 
C:in `migrate' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:537:in `block (2 levels) in migrate' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:613:in `call' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:613:in `ddl_transaction' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:536:in `block in migrate' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `each' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `migrate' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:433:in `up' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:415:in `migrate' 
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/railties/databases.rake:142:in `block (2 levels) in <top (required)>' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:634:in `call' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:634:in `block in execute' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:629:in `each' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:629:in `execute' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain' 
C:/Ruby/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:581:in `invoke' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `each' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:2013:in `top_level' 
C:/Ruby/lib/ruby/1.9.1/rake.rb:1992:in `run' 
C:/Ruby/bin/rake:31:in `<main>' 

は、問題の移行です:

class AddNotesIndex < ActiveRecord::Migration 
    def self.up 
     add_index :users, :email,    :unique => true 
     add_index :users, :reset_password_token, :unique => true 
     add_index :users, :confirmation_token, :unique => true 
     add_index :users, :unlock_token,   :unique => true 
    end 

    def self.down 
     remove_index :users, :email,    :unique => true 
     remove_index :users, :reset_password_token, :unique => true 
     remove_index :users, :confirmation_token, :unique => true 
     remove_index :users, :unlock_token,   :unique => true 
    end 
end 

これは私がオリジナルのアプリでインデックスを作成するために使用されるまったく同じコードです。 Ruby 1.9.2、Rails 3.0.3、mysql2 0.2.6 x86-mingw32、MySQL 5.1.41のように、私はこのコンピュータ上で全く同じ環境を実行しています。私は同じlibmysql.dllでコピーしました。私は困惑している。

EDIT

ハハ、私は愚かです。 MySQL \ MySQL Server 5.1 \ binのlibmysql.dllを更新していましたが、Ruby \ binのものは更新しませんでした。 Ruby \ binに最新バージョンをコピーしたら、すべて正常に動作しました。みんな、ありがとう!

+0

DBコンソール( 'rails db')を開き、' SHOW KEYS FROM users'を実行できますか?出力は何ですか? –

答えて

1

多くの人がこの問題を抱えているようです。このエラーはmysql2 gemから発生したようです。だから何が私のためにして働いていた:

  1. Gemfile
  2. でMySQLへmysql2から
  3. 変更
  4. 変更database.ymlを

でmysql2からMySQLへのアダプターそして可能ドロップMySQLの宝石をインストールします。最後のテーブルは、add_indexの呼び出しと同じ移行で作成された場合に作成されたもので、再度作成しようとします。

解決策の解決策がもっとあるかもしれませんが、私はまだそれ以上の改善方法を見つけていません。

関連する問題