Auch ich bin neu in Capistrano, und versuche, es zum ersten Mal zu verwenden, um eine Rails-Anwendung zu implementieren zu Produktionsservern, die ich mit Puppet konfiguriert habe.
Ich musste endlich in die Capistrano-Quelle (und capistrano/bundler und capistrano/rails, und sogar sshkit und net-ssh, um auth-Probleme zu debuggen) graben, um genau zu bestimmen, wie alles funktioniert, bevor ich mich für mich entschied Änderungen, die ich machen wollte. Ich habe gerade diese Änderungen vorgenommen hat, und ich bin zufrieden mit den Ergebnissen:
# lib/capistrano/tasks/cold.rake
namespace :deploy do
desc "deploy app for the first time (expects pre-created but empty DB)"
task :cold do
before 'deploy:migrate', 'deploy:initdb'
invoke 'deploy'
end
desc "initialize a brand-new database (db:schema:load, db:seed)"
task :initdb do
on primary :web do |host|
within release_path do
if test(:psql, 'portal_production -c "SELECT table_name FROM information_schema.tables WHERE table_schema=\'public\' AND table_type=\'BASE TABLE\';"|grep schema_migrations')
puts '*** THE PRODUCTION DATABASE IS ALREADY INITIALIZED, YOU IDIOT! ***'
else
execute :rake, 'db:schema:load'
execute :rake, 'db:seed'
end
end
end
end
end
Die deploy: kalt Aufgabe nur Haken meiner benutzerdefinierten deploy: inidb Aufgabe vor deploy auszuführen: wandern. Auf diese Weise werden das Schema und die Startwerte geladen, und der folgende Schritt deploy: migrate führt nichts (sicher) aus, da keine neuen Migrationen ausgeführt werden müssen. Aus Sicherheitsgründen prüfe ich, ob die Tabelle schema_migrations vor dem Laden des Schemas bereits existiert, falls Sie deploy: cold erneut ausführen.
Hinweis: Ich habe die Datenbank mithilfe von Puppet erstellt, sodass ich die Berechtigung CREATEDB nicht meinem postgresql-Benutzer erteilen kann, aber wenn Capistrano dies tun soll, fügen Sie einfach "execute: rake, 'db: create" hinzu '"vor der db: schema: laden, oder alle drei Zeilen durch' db: setup 'ersetzen.
Vielen Dank für den Vorschlag; Es erleichterte mich mit meinem eigenen Instinkt, dass ich mich neu entfalten musste: kalt war der Weg. Ich habe meine eigene Version unter deiner gepostet. – odigity