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).


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

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}



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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.