Как управлять Rails database.yml

Каков наилучший способ обработки Rails database.yml, если несколько человек работают над проектом, а расположение базы данных отличается (в частности, сокет).

Ответ 1

Сначала переместите 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

Этот плагин предупреждает разработчиков перед запуском любых задач Rake, если они не создали собственную локальную версию config/database.yml.

В-четвертых, настройте задачу развертывания 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 [email protected]_server.com:/path_to_rails_app/shared/config/database.yml

Ответ 2

В Capistrano 3 вместо добавления новой задачи вы можете просто сделать:

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

Ответ 3

Вы можете использовать свойство svn: ignore, чтобы этот файл не был версией.

Инструкции здесь.

Ответ 5

В дополнение к вышеприведенным ответам, я написал задачу рейка, подобную "Где ваш database.yml, чувак?", но позволяющий хранить примеры шаблонов любого файла конфигурации. Проверьте это: https://github.com/Velid/exemplify

В качестве альтернативы написанию отдельных производственных конфигураций и их связыванию через Capistrano, я бы также предложил использовать переменные среды для ваших учетных данных:

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

Существует много инструменты и способы, чтобы сделать это доступным.