So verwalten Sie Rails database.yml

82

Was ist der beste Weg, um mit der Rails database.yml umzugehen, wenn mehrere Personen am Projekt arbeiten und die Datenbankspeicherorte unterschiedlich sind (insbesondere der Socket).

Phillee
quelle
2
Klarstellung: Ich möchte, dass dies mit Capistrano funktioniert, das von svn auscheckt, damit ich nicht denke, dass Ignorieren funktioniert.
Phillee
1
Ich habe zwei weitere Schritte für den Fall Capistrano hinzugefügt.
James A. Rosen

Antworten:

160

Wechseln Sie zunächst database.ymlzu einer Vorlagendatei.

Wenn du auf Git bist:

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

Oder wenn Sie auf Subversion sind:

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

Zweitens ignorieren Sie die .yml-Version.

Wenn du auf Git bist:

cat > .gitignore
config/database.yml

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

Wenn Sie auf Subversion sind:

svn propset svn:ignore config "database.yml"

Drittens installieren Wo ist deine database.yml, Alter? ::

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

Dieses Plugin warnt Entwickler, bevor Rake-Aufgaben ausgeführt werden, wenn sie keine eigene lokale Version von erstellt haben config/database.yml.

Viertens: Richten Sie eine Capistrano-Bereitstellungsaufgabe ein:

# 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

Fünftens laden Sie die Serverversion von database.yml hoch:

scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
James A. Rosen
quelle
8
Es ist üblich (obwohl keinesfalls erforderlich), die Antwort zu "akzeptieren", die Sie am hilfreichsten finden. Ich denke, Sie bekommen sogar ein Abzeichen für Ihre erste Annahme.
James A. Rosen
3
Mein schlecht - stimmte ab, sah aber den Scheck nicht. fertig und danke!
Phillee
Ich musste nach 'deploy: update_code', 'deploy: symlink_db' auf vor 'deploy: resources: precompile', 'deploy: symlink_db' ändern und dann funktionierte es.
Joshua.paling
Bis auf den fünften Schritt funktioniert alles. Es heißt, es gibt kein solches Verzeichnis, aber es ist da.
Sebastialonso
Nur ein wichtiger Hinweis, ich schlage vor, cat >> .gitignorestattdessen zu verwenden. Da Sie sonst Ihre vorhandene Datei
wegblasen
16

In Capistrano 3 können Sie anstelle der neuen Aufgabe einfach Folgendes tun:

set :linked_files, %w{config/database.yml}
Martin Sommer
quelle
2

Sie können die Eigenschaft svn: ignore verwenden, um zu verhindern, dass diese Datei versioniert wird.

Anleitung hier.

Sam DeFabbia-Kane
quelle
0

Zusätzlich zu den obigen Antworten habe ich eine Rake-Aufgabe geschrieben, die "Wo ist Ihre database.yml, Alter?" Ähnlich ist, aber es erlaubt, Vorlagenbeispiele für jede Konfigurationsdatei beizubehalten. Probieren Sie es aus: https://github.com/Velid/exemplify

Als Alternative zum Schreiben separater Produktionskonfigurationen und zum Verknüpfen dieser über Capistrano würde ich auch vorschlagen, Umgebungsvariablen für Ihre Anmeldeinformationen zu verwenden:

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

Es gibt viele praktische Tools und Möglichkeiten , dies zu tun.

SchmugglerFlynn
quelle