带有多个数据库的Rails夹具

时间:2011-11-30 13:13:05

标签: ruby-on-rails fixtures multiple-databases

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

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

另外两个数据库是mysql,并且还有名为%dbname%_test的测试实例,并且已经填充了测试数据。

在我添加了灯具之后,所有我的测试都失败了“ActiveRecord :: StatementInvalid:Mysql :: Error:Unknown column”错误,因为rails试图将灯具应用到 其中一个mysql数据库。

有没有办法指定为哪个数据库制作灯具?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

other_one_test:
  adapter: mysql
  # ...

other_two_test:
  # ...

other_one_development:
  # ...

other_two_development:
  # ...

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

连接到它们
establish_connection("other_one_test")

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

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

class SomeModel < OtherOneBase
end

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