Як керувати Rails database.yml


82

Який найкращий спосіб обробляти Rails database.yml, якщо над проектом працює кілька людей, а розташування бази даних різне (зокрема, сокет).


2
Пояснення: Я хотів би, щоб це працювало з Capistrano, який перевіряє від svn, тому я не думаю, що ігнорує роботи.
phillee

1
Я додав ще два кроки до справи Капістрано.
James A. Rosen,

Відповіді:


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"

По-третє, встановіть Where's your 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
Зазвичай (хоча це ні в якому разі не потрібно) "приймати" відповідь, яка вам здається найбільш корисною. Я думаю, ви навіть отримуєте значок для першого прийняття.
James A. Rosen

3
мій поганий - проголосував за, але чека не побачив. готово і дякую!
phillee

Мені довелося змінити після 'deploy: update_code', 'deploy: symlink_db' до перед 'deploy: assets: precompile', 'deploy: symlink_db', і тоді це спрацювало.
joshua.paling

Все працює, крім п’ятої сходинки. Там сказано, що такого каталогу немає, але він є.
Себастіалонсо

Тільки важлива примітка, я пропоную використовувати cat >> .gitignoreзамість цього. Оскільки інакше ви
здуєте

16

У Capistrano 3, замість того, щоб додавати нове завдання, ви можете просто зробити:

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



0

На додаток до наведених вище відповідей, я написав завдання на граблі, подібне до "Де твоя база даних.yml, чувак?", Але дозволяючи зберігати приклади шаблонів будь-якого конфігураційного файлу. Перевірте це: https://github.com/Velid/exemplify

Як альтернативу написанню окремих виробничих конфігурацій та зв’язуванню їх через Capistrano, я б також запропонував використовувати змінні середовища для своїх облікових даних:

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

Є багато зручних інструментів та способів зробити це навколо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.