2011-01-15 3 views
3

다른 컴퓨터에서 (작동 중!) 레일즈 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을 복사했습니다. 나는 혼란 스럽다.

편집

하하, 나는 바보입니다. MySQL \ MySQL 서버 5.1 \ bin에 libmysql.dll을 업데이트했지만 Ruby \ bin에있는 libmysql.dll은 업데이트하지 않았습니다. Ruby \ bin에 최신 버전을 복사하면 모든 것이 잘 동작합니다. 고마워, 모두들!

+0

DB 콘솔 ('rails db')을 열고'SHOW KEYS FROM users'를 실행할 수 있습니까? 출력은 무엇입니까? –

답변

1

많은 사람들이이 문제를 겪고있는 것 같습니다. 이 오류는 mysql2 gem에서 비롯된 것 같습니다. 그래서 나를 위해 일한 것은이었다

  1. database.yml을

그리고 가능한 드롭 MySQL의에 mysql2에서 Gemfile에 MySQL의에

  • 변경 어댑터를 mysql2에서 MySQL의 보석
  • 변경 설치 마지막 테이블은 add_index를 호출 할 때와 동일한 마이그레이션에서 생성 된 경우 다시 만들어집니다.

    아마도 해결책보다 해결책이 많지만 더 좋은 방법은 아직 없습니다.

  • 관련 문제