如何在Rails中设置测试数据库配置

时间:2015-07-20 18:57:06

标签: ruby-on-rails ruby rspec

我正在研究现有的rails项目,刚刚完成了一些基本的RSpec测试。 在我们的database.yml文件中,我们连接到3-4个不同的数据库,所有数据库都指向production数据库或staging数据库。 对于测试环境,我创建了一个名为yml的不同database.test.yml文件,然后将其符号链接到database.yml文件,以便创建正确的测试数据库连接。

我的database.test.yml看起来像这样:

abc:
  adapter: mysql2
  host: localhost
  reconnect: true
  username: monty
  password: python
  database: abc

pqr:
  adapter: mysql2
  host: localhost
  reconnect: true
  username: monty
  password: python
  database: pqr

test:
  adapter: mysql2
  host: localhost
  reconnect: true
  username: monty
  password: python
  pool: 50
  database: testing

我现在的问题是如何强制其他开发人员/测试人员使用此database.test.yml并且不小心运行包含与database.yml和{{1}的连接的主staging文件数据库。

编辑:

为了进一步澄清我的问题,我在各种模型中production连接到不同的数据库。所以我不确定早先的建议会解决我的问题。

示例:

establish_connection

我能想到解决问题的一种方法是做这样的事情:

class Abc < ActiveRecord::Base
  establish_connection :abc
end

class Abc < ActiveRecord::Base establish_connection "abc_#{Rails.env}" end

database.yml

但我不确定这是否是最佳实践,我真的不觉得改变应用程序代码来设置测试环境是一种很好的做法。 这个想法基于:http://blog.nistu.de/2012/03/25/multi-database-setup-with-rails-and-rspec

任何微调或指向修正方向的指针都会非常有用。

1 个答案:

答案 0 :(得分:0)

你可以拥有一些东西,比如:

default: &default
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: xxxx_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: xxxx_test

production:
  <<: *default
  database: xxxx_production