2011-12-09 10 views
4

ruby​​をgithubから取得したRuby上で実行しようとしていて、homebrewを使ってmysqlをインストールしてしまい、 http://dev.mysql.com/から直接。そのときだけ、アプリケーションファイルでrakeを使ってテストを実行し始めたのです。しかし、今私はこのMysql2 ::エラーを取得し続けている:重複したエントリと私はなぜ理解していない。 2つの異なる場所に2つのmysqlsがあります。すべてのテーブルが空であるため、この問題の原因となるものは本当にわかりません。この問題を解決するにはどうすればよいですか?助けてくれてありがとう。私はRuby on RailsとMysqlの新機能です。Mysql2 :: Error:キー 'index_admin_users_on_email'の重複したエントリ 'index_admin_users_on_email' Ruby on Railsエラー

スタックは、次のようになります。

HomeControllerTest 
test_should_get_index            ERROR 
    Mysql2::Error: Duplicate entry '' for key 'index_admin_users_on_email': INSERT INTO `admin_users` (`created_at`, `updated_at`, `id`) VALUES ('2011-12-09 09:33:30', '2011-12-09 09:33:30', 298486374) 
    STDERR: 
    Exception `ActiveRecord::RecordNotUnique' at /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `query' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `block in execute' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:302:in `insert_fixture' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:486:in `block (5 levels) in create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:485:in `each' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:485:in `block (4 levels) in create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:484:in `each' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:484:in `block (3 levels) in create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:476:in `each' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:476:in `block (2 levels) in create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:475:in `block in create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:202:in `disable_referential_integrity' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:460:in `create_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:924:in `load_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/fixtures.rb:890:in `setup_fixtures' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/callbacks.rb:413:in `_run_setup_callbacks' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/callbacks.rb:81:in `run_callbacks' 
    /Users/nick01s/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/testing/setup_and_teardown.rb:34:in `run' 

答えて

4

これは、MySQLの2回のインストールがこの問題を引き起こしているとは考えにくいです。 Railsは1つのデータベースにのみ接続する必要があります。どちらに接続しているのか分からないかもしれませんが、複数のDBに接続するには余分な作業が必要です。

私は、テスト中のフィクスチャが不良だったときに重複するキーエラーが発生しているのを見ました。

スタックトレースでは、(フィクスチャまたは工場)が必須フィールドなしでadmin_userを作成しようとしているように見えます。 2倍。

インデックスが一意に設定されているため、2回目に例外がスローされます。

+0

ありがとう、私はこの問題をRuby on Railsフレームワークで修正する場所をどこに見つけることができますか?たとえば、この例外をスローしたファイルはどれですか? – Ectac

+0

stacktraceの1つの興味深い行は次のとおりです: [...] lib/active_record/connection_adapters/abstract/database_statements.rb:302: 'insert_fixture 'の中ですので、まずフィクスチャファイルを見て始め、工場があればファクトリが既存のオブジェクトと競合しているかどうかを確認してください – edk750

+0

なぜコードが不完全なレコードをデータベースに挿入しているのかを見てください:INSERT INTO 'admin_users'(' created_at'、 'updated_at'、' id')VALUES( '2011 -12-09 09:33:30 '、' 2011-12-09 09:33:30 '、298486374)...ここにメールアドレスがありません。 – edk750

15

このエラーが発生した人は、active_adminを既存のプロジェクトにインストールすることができます。

admin_users.ymlフィクスチャファイルは、2つの空のレコードを挿入するためにレールによって初期化されました。これらの空の挿入が私のためにエラーを修正/削除コメントアウト

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html 

# This model initially had no columns defined. If you add columns to the 
# model remove the '{}' from the fixture names and add the columns immediately 
# below each fixture, per the syntax in the comments below 
# 
one: {} 
# column: value 
# 
two: {} 
# column: value 

を。

+0

ニース、ちょうどこの2行 "1と2"をコメントして、テストが正常に動作するはずです。 –

関連する問題