У меня была такая же проблема, но я подошел к ней по-другому. Может быть, это будет полезно.
Задача установки копирует database.yml.example в database.yml. Задача развертывания не затрагивает database.yml. У меня есть отдельные задачи для изменения имен базы данных, имен пользователей и паролей. Вот пример:
desc "Change the database name"
task :change_db_database, :roles => :app do
database = prompt('Enter new database name: ')
run <<-CMD
cd #{shared_path}/config &&
perl -i -pe '$env = $1 if /^(\\w+)/; s/database:.*/database: #{database}/ if $env eq "#{ENV['CONNECTION'] || ENV['TARGET']}"' database.yml
CMD
end
Я запускаю их после установки, но перед первым развертыванием на новых коробках. Затем, когда мне нужно изменить параметры базы данных, я использую эти задачи вместо копирования в новый файл.