Als ich anfing, Capistrano immer mehr zu verwenden, habe ich mich auch darüber gewundert. Ich denke, die meisten von uns sind sich einig, dass es Sinn macht, _Laufzeitkonfigurations_informationen getrennt von funktionalen Codes zu verfolgen, oder? Sollte das also nicht auch für Bereitstellungskonfigurationen gelten?
Ich denke, du könntest deinen ./deploy/
-Ordner zu einem SCM-Teilprojekt machen. Du könntest eine Rake-Aufgabe erstellen, die die Capfile in dein Arbeitskopie generiert, so dass du eventuelle Passwörter und ähnliches außerhalb der App behältst... Es könnte sogar eine entsprechende Gem dafür geben.
Allerdings habe ich mich für einen alternativen Ansatz entschieden:
Ich habe ungefähr zehn verschiedene Anwendungen, bei denen der Großteil der Capistrano-Variablen einem Muster wie set(:deploy_to) {"#{base_dir}/#{environment}/#{application}"}
folgen könnte, ebenso wie für die Pfade zum Quellcode-Repository.
Ich habe alle Kenntnisse über Bereitstellung aus den einzelnen Anwendungen herausgenommen und stattdessen in einem separaten, gemeinsamen "Bereitstellungsprojekt" platziert. Jetzt kann ich dieses Projekt auschecken und folgendes ausführen:
cap [eine Anwendung] [Umgebung] [Bereitstellungsaufgabe]
Ich bevorzuge dieses Muster / diese Trennung der Verantwortlichkeiten viel mehr als das Verstreuen von Capfiles überall hin.