Managing database.yml with capistrano
Here is the code that lets us write our database.yml after we deploy, and then symlinks it correctly:
desc "Create database.yml in shared/config" 
task :after_setup do
  database_configuration = render :template => <<-EOF
login: &login
  adapter: postgresql
  host: localhost
  port: <%= postgresql_port %>
  username: <%= user %>
  password: <%= password %>

development:
  database: <%= "#{application}_development" %>
  <<: *login

test:
  database: <%= "#{application}_test" %>
  <<: *login

production:
  database: <%= "#{application}_production" %>
  <<: *login
EOF

  run "mkdir -p #{deploy_to}/#{shared_dir}/config" 
  put database_configuration, "#{deploy_to}/#{shared_dir}/config/database.yml" 
end

desc "Link in the production database.yml" 
task :after_update_code do
  run "ln -nfs #{deploy_to}/#{shared_dir}/config/database.yml #{release_path}/config/database.yml" 
end
Language Ruby / Tagged with rails, capistrano