如何pipe理Rails的database.yml

如果多个人正在处理项目和数据库位置不同(尤其是套接字),处理Rails database.yml的最佳方式是什么?

首先,将database.yml移动到模板文件中。

如果你在Git上:

 git mv config/database.yml config/database.yml.example git commit -m "moved database.yml to an example file" 

或者,如果你在Subversion上:

 svn move config/database.yml config/database.yml.example svn ci -m "moved database.yml to an example file" 

其次,忽略.yml版本。

如果你在Git上:

 cat > .gitignore config/database.yml git add .gitignore git commit -m "ignored database.yml" 

如果你在Subversion上:

 svn propset svn:ignore config "database.yml" 

三,安装你的database.yml在哪里,老兄? :

 script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude 

如果没有创build自己的本地版本的config/database.yml那么该插件会在任何Rake任务运行之前通知开发人员。

第四,设立一个Capistrano部署任务:

 # in RAILS_ROOT/config/deploy.rb: after 'deploy:update_code', 'deploy:symlink_db' namespace :deploy do desc "Symlinks the database.yml" task :symlink_db, :roles => :app do run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" end end 

五,上传服务器版本的database.yml:

 scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml 

在卡皮斯特拉诺3,而不是增加新的任务,你可以做到:

 set :linked_files, %w{config/database.yml} 

您可以使用svn:ignore属性来防止该文件被版本化。

在这里说明。

另一种方法是使用Capistrano和ERb在部署期间提示凭据。

http://www.simonecarletti.com/blog/2009/06/capistrano-and-database-yml/

除了上面的答案之外,我写了一个类似于“Where's your database.yml,dude?”的rake任务,但允许保留任何configuration文件的模板示例。 检查出来: https : //github.com/Velid/exemplify

作为编写单独的生产configuration和通过Capistrano链接它们的替代方法,我还build议使用环境variables作为凭据:

 password: <%= ENV['PROD_DATABASE_PASSWORD'] %> 

有很多方便的 工具和方法可以做到这一点。