6

我正在尝试将测试装置添加到使用多个数据库的 rails (v 3.1.3) 应用程序中。夹具应仅应用于应用程序自己的测试 sqlite 数据库:

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

其他 2 个数据库是 mysql,也有名为 %dbname%_test 的测试实例,并且已经填充了测试数据。

添加夹具后,我的所有测试都因“ActiveRecord::StatementInvalid: Mysql::Error: Unknown column”错误而失败,因为 rails 正在尝试将夹具应用于 mysql 数据库之一。

有没有办法指定一个夹具是为哪个数据库制作的?

4

2 回答 2

4

Fixtures-init 代码(在 activerecord-3.2.6/lib/active_record/fixtures.rb 中)有一个 bug:在“initialize”方法中,在第 544 行的“else”中,需要将 @connection 初始化为 @model_class。联系。(否则,@connection 只是指向错误数据库的“连接”。)

于 2013-04-04T17:49:25.713 回答
2

在 database.yml 中,为每个环境的每个其他数据库添加一个连接:

other_one_test:
  adapter: mysql
  # ...

other_two_test:
  # ...

other_one_development:
  # ...

other_two_development:
  # ...

在使用其他数据库的模型中,使用

establish_connection("other_one_test")

您可能希望为每个不同的数据库连接创建一个基类模型,并将其用于连接到该数据库的所有模型:

class OtherOneBase < ActiveRecord::Base
  establish_connection "other_one_#{Rails.env}"
end

class SomeModel < OtherOneBase
end

如果您正确设置模型,您的夹具将使用正确的数据库。

于 2011-12-02T05:33:02.213 回答