Jak zarządzać bazą danych w Railsach database.yml

82

Jaki jest najlepszy sposób obsługi pliku database.yml w Railsach, jeśli nad projektem pracuje wiele osób, a lokalizacje bazy danych są różne (w szczególności gniazdo).

phillee
źródło
2
Wyjaśnienie: chciałbym, żeby to działało z Capistrano, który sprawdza się z svn, więc nie sądzę, aby ignorować prace.
phillee
1
Dodałem jeszcze dwa kroki do przypadku Capistrano.
James A. Rosen

Odpowiedzi:

160

Najpierw przejdź database.ymldo pliku szablonu.

Jeśli korzystasz z Git:

git mv config/database.yml config/database.yml.example
git commit -m "moved database.yml to an example file"

Lub, jeśli korzystasz z Subversion:

svn move config/database.yml config/database.yml.example
svn ci -m "moved database.yml to an example file"

Po drugie, zignoruj ​​wersję .yml.

Jeśli korzystasz z Git:

cat > .gitignore
config/database.yml

git add .gitignore
git commit -m "ignored database.yml"

Jeśli korzystasz z Subversion:

svn propset svn:ignore config "database.yml"

Po trzecie, zainstaluj Where's your database.yml, stary? :

script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude

Ta wtyczka ostrzega programistów przed uruchomieniem jakichkolwiek zadań Rake, jeśli nie utworzyli własnej lokalnej wersji config/database.yml.

Po czwarte, skonfiguruj zadanie rozmieszczenia 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

Po piąte, prześlij wersję pliku database.yml na serwer:

scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
James A. Rosen
źródło
8
Jest zwyczajem (choć w żadnym wypadku nie jest to wymagane) „akceptowanie” odpowiedzi, którą uznasz za najbardziej pomocną. Myślę, że dostaniesz nawet odznakę za pierwszą akceptację.
James A. Rosen
3
mój zły - zagłosowałem, ale nie widziałem czeku. gotowe i dziękuję!
phillee
Musiałem zmienić po „wdrożeniu: kod_aktualizacji”, „wdrożeniu: symlink_db” na przed „wdrożeniem: zasób: prekompilacja”, „wdrożeniu: symlink_db”, a potem zadziałało.
joshua.paling
Wszystko działa, z wyjątkiem piątego kroku. Mówi, że nie ma takiego katalogu, ale tam jest.
Sebastialonso
Tylko ważna uwaga, sugeruję użycie cat >> .gitignorezamiast tego. Ponieważ w przeciwnym razie
rozwalisz
16

W Capistrano 3 zamiast dodawać nowe zadanie, możesz po prostu wykonać:

set :linked_files, %w{config/database.yml}
Martin Sommer
źródło
2

Możesz użyć właściwości svn: ignore, aby zapobiec wersjonowaniu tego pliku.

Instrukcje tutaj.

Sam DeFabbia-Kane
źródło
0

Oprócz powyższych odpowiedzi, napisałem zadanie rake podobne do „Where's your database.yml, dude?”, Ale pozwalające zachować przykłady szablonów dowolnego pliku konfiguracyjnego. Sprawdź to: https://github.com/Velid/exemplify

Jako alternatywę dla pisania oddzielnych konfiguracji produkcyjnych i łączenia ich przez Capistrano, sugerowałbym również użycie zmiennych środowiskowych dla twoich poświadczeń:

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

Istnieje wiele przydatnych narzędzi i sposobów, aby to zrobić.

przemytnikFlynn
źródło