我已经查阅了Ruby on Rails指南和堆栈溢出,关于设置database.yml文件以及它们是如何设置的但是我遇到了一些特殊的database.yml文件以及它们如何与每个其他。参考Ruby on Rails指南对我来说并不一定清楚。我希望有人可以为我填补空白。
这是database.yml文件:
development:
db_host: qa-db.company_name.com
db_port: 5432
db_name: company_staging
db_user: rubyuser
db_pass: generic_password
# 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:
db_host: qa-db.company_name.com
db_port: 5432
db_name: company_test
db_user: rubyuser
db_pass: generic_password
testing:
db_host: host
db_port: 5432
db_name: company_staging
db_user: rubyuser
db_pass: normal_password
selenium:
db_host: host
db_port: 5432
db_name: company_selenium
db_user: ruby
db_pass: normal_password
production:
db_host: qa-db.company_name.com
db_port: 5432
#db_name: company_production
db_name: company_staging
db_user: ruby
db_pass: generic_password
这是我感到困惑的地方。究竟该文件中有多少个数据库?我的意思是根据实际的数据副本。显而易见的答案是有五个数据库。但我不太确定。
查看数据库开发,测试和生产。这三个数据库的db_host指向qa_db.company_name.com。这告诉我这三个数据库指向相同的数据。开发,测试和生产包含相同的数据,这意味着如果我在测试中放弃数据,那么开发和生产也将被消除。但请注意,这三个数据库具有不同的db_names。请注意,开发和生产都将其db_names作为company_staging,而test具有company_test。这对数据有何影响?这些是不同的副本吗? db_name是否更改指向不同的内容?
测试数据库具有db_host:host,而名称为company_staging。如果我要登录这个。我会在哪个数据库?
对我来说,这是一个阴暗的领域,所以一些澄清真的可以帮助我。感谢。
答案 0 :(得分:0)
在生产环境中,您将只定义一个且只有一个数据库,除非您有一个使用多个不同数据库服务器的异常配置。
在开发环境中,根据您的测试策略,您将有两到三个。通常development
和test
被定义,其他被省略,因为它们不相关。
在您的开发环境中定义production
并不是真的有用,因为您不应该首先连接到该数据库,它应该被严重防火墙。
通常config/database.yml
不包含在您的版本控制中,而是某种"示例"而是包含文件。由于您团队中的每个开发人员可能拥有不同的凭据,因此最好省略此文件,而是使用您自己的自定义版本而不是存在冲突。
我的建议是在服务器上存储特定于服务器的配置,并在部署时将其链接到正确的位置。例如shared/config/database.yml
通过Capistrano等工具与releases/NNNN/config/database.yml
进行符号链接。
database.yml
文件的长和短是Rails会在那里找到与当前RAILS_ENV
匹配的密钥,并使用该配置进行数据库的初始连接。你可以在那里拥有任意数量的东西,但只有与你的环境相关的那个很重要。