出于安全目的,我不想将我的生产用户名和密码检查到版本控制中。如果我签入它,每个人都可以看到它。这是被检查到版本控制中的 database.yml 文件:
# /config/database.yml:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: desk_production
pool: 5
username: root
password: password_here
如您所见,“password_here”作为密码签入 - 但如果曾经针对生产数据库进行过检查,这是一个无效的密码。除了将我的实时密码检查到版本控制中之外,我基本上有两个选择:
- 将生产服务器上的真实 database.yml 文件保存在应用程序根目录上方的目录中。制作一个 capistrano 配方以在部署应用程序时为该文件创建一个符号 lync - 这基本上会覆盖检入版本控制的 database.yml 文件。
- 保存真正的 database.yml 文件(就像在选项 #1 中一样),但不是制作符号 lync,而是将其导入到版本控制中的 database.yml 文件中。这将允许系统在每次部署应用程序时引用服务器上的现有文件,而无需部署人员担心更改密码或创建符号 lync。另外,我可以将永久 database.yml 文件保留在服务器集上,这样部署者就看不到它了……
我最喜欢第二个选项,它基本上看起来像这样:
# Config file permanently stored on the web server:
# ../app_root/database.yml (notice this is one level up from the app so it doesn't get written over)
# This is the file checked into version control:
production:
<< ../app_root/database.yml