由于schema_migrations的唯一约束,Rails单元测试失败

时间:2009-01-12 19:05:44

标签: mysql ruby-on-rails ruby testing migration

我正在尝试运行rake test:units并且我一直这样做:

Mysql::Error: Duplicate entry '2147483647' for key 1: INSERT INTO `ts_schema_migrations` (version) VALUES ('20081008010000')

ts_”就在那里因为我设置了ActiveRecord::Base.table_name_prefix。我很困惑,因为表中已经没有值'20081008010000',并且没有值'2147483647'的迁移(尽管值确实出现在表中)。

在Rails'schema_statments.rb中,有以下内容:

def initialize_schema_migrations_table
  sm_table = ActiveRecord::Migrator.schema_migrations_table_name

    unless tables.detect { |t| t == sm_table }
      create_table(sm_table, :id => false) do |schema_migrations_table|
        schema_migrations_table.column :version, :string, :null => false
      end
      ...

在我的开发数据库中,ts_schema_migrations.versionVARCHAR。在测试中,虽然它是INTEGER。我已经删除了表并重新运行了几次迁移(和/或rake db:schema:load RAILS_ENV=test)。没有变化。

我的MySQL适配器有问题吗?

2 个答案:

答案 0 :(得分:1)

看起来你的测试架构是Rails 1.x,而开发是Rails 2.也许你可以设置RAILS_ENV来测试并运行rake db:reset

答案 1 :(得分:1)

从Rails 1.x升级到2.0时,您似乎跳过了一些步骤。

浏览并阅读升级说明:

http://www.slashdotdash.net/2007/12/03/rails-2-upgrade-notes/

发布说明:

http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done

他们会告诉您需要遵循的所有步骤。特别是通过时间戳重新生成所有脚本并将数据库迁移到新的数据库迁移系统,而不是递增迁移ID。