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.