我正在研究现有的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
任何微调或指向修正方向的指针都会非常有用。
答案 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