Как работать с Rails database.yml

82

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

Филли
источник
2
Уточнение: я бы хотел, чтобы это работало с Capistrano, который проверяется из svn, поэтому я не думаю, что игнорирование работает.
Филли
1
Я добавил еще два шага для дела Капистрано.
Джеймс А. Розен,

Ответы:

160

Сначала перейдите 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 user@my_server.com:/path_to_rails_app/shared/config/database.yml
Джеймс А. Розен
источник
8
Принято (хотя и не обязательно) «принять» ответ, который вы считаете наиболее полезным. Я думаю, ты даже получишь значок за первое принятие.
Джеймс А. Розен,
3
мой плохой - проголосовал, но не видел чек. готово и спасибо!
Филли
Мне пришлось изменить после 'deploy: update_code', 'deploy: symlink_db' до 'deploy: assets: precompile', 'deploy: symlink_db', и тогда это сработало.
joshua.paling
Все работает, кроме пятой ступени. В нем говорится, что такого каталога нет, но он есть.
Sebastialonso
Просто важное замечание, я предлагаю использовать cat >> .gitignoreвместо него. Так как иначе вы
удалите
16

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

set :linked_files, %w{config/database.yml}
Мартин Соммер
источник
2

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

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

Сэм ДеФаббиа-Кейн
источник
0

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

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

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

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

контрабандист
источник