出于安全考虑,我不想将我的生产用户名和密码检查到版本控制中。如果我检查它,每个人都能看到它。这是database.yml文件,因为它被检入版本控制:
# /config/database.yml:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: desk_production
pool: 5
username: root
password: password_here
正如您所看到的,'password_here'作为密码签入 - 但如果对生产数据库进行了检查,则这是一个无效的密码。除了将我的实时密码检入版本控制之外,我基本上有两个选项:
我最喜欢第二种选择,基本上看起来像这样:
# 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
答案 0 :(得分:3)
或者您可以从环境变量中读取它:
production:
...
password: <%= ENV['DB_PASSWORD'] %>
...
您只需要确保启动rails应用程序的用户在其配置文件中设置了环境变量,以便在ENV
哈希中可用。例如,我经常使用deployer
用户通过capistrano部署应用程序,因此我在该用户的export DB_PASSWORD=the_password
文件中设置了~/.bashrc
(无论是哪个用户都可以使用.yml
文件。你正在部署的系统。)
这样,它就是源控件的一部分,因为每个人都知道在哪里设置密码,但密码本身不是源代码控制的一部分。显然,你需要保守这个秘密。
对我来说也不是很明显,但.erb
文件can have embedded ruby在其中,类似于{{1}}模板,但我遇到过这样的事情没有当环境变量本身具有某些特殊字符时工作。