How to manage Rails database.yml
First, move database.yml
to a template file.
If you're on Git:
git mv config/database.yml config/database.yml.examplegit commit -m "moved database.yml to an example file"
Or, if you're on Subversion:
svn move config/database.yml config/database.yml.examplesvn ci -m "moved database.yml to an example file"
Second, ignore the .yml version.
If you're on Git:
cat > .gitignoreconfig/database.ymlgit add .gitignoregit commit -m "ignored database.yml"
If you're on Subversion:
svn propset svn:ignore config "database.yml"
Third, install Where's your database.yml, dude?:
script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude
That plugin alerts developers before any Rake tasks are run if they haven't created their own local version of config/database.yml
.
Fourth, set up a Capistrano deploy task:
# 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" endend
Fifth, upload the server's version of database.yml:
scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
In Capistrano 3, instead of adding the new task, you can just do:
set :linked_files, %w{config/database.yml}
You can use the svn:ignore property to prevent that file from being versioned.