2017-02-12 6 views
2

Ich möchte meine Unit-Dateien in der Quellcodeverwaltung behalten (zB in config), so dass nach einem capistrano deploy das Gerät in das Verzeichnis systemd kopiert wird und der Dienst (zB Puma) wird neu gestartet werden. Was wäre der beste Weg, dies zu erreichen?Capistrano und systemd integration

Ich habe einfach gedacht a post-deploy task wie (ungetestet Code) Zugabe

namespace :deploy do 
[...] 

    before :published, :systemd 
    desc 'systemd' 
    task :systemd do 
    on roles(:web), in: :groups, limit: 3, wait: 10 do 
     within release_path do 
     execute "sudo cp config/puma.service /etc/systemd/system/puma.service" 
     execute "sudo cp config/puma-init /usr/bin/puma-init" 
     execute "sudo systemctl daemon-reload" 
     execute "sudo systemctl restart puma" 
     end 
    end 
    end 
end 

Antwort

0

So etwas, was Sie in Ihrem Beispiel beschrieben haben funktioniert. Als Alternative habe ich einen Symlink erstellt.

Um dies zu tun, würde ich vorschlagen, Ihre Service-Dateien zu etwas wie config/systemd/ in Ihrem Repo zu verschieben. Stellen Sie es einmal bereit und erstellen Sie dann einen Symlink auf dem Server wie ln -s $CURRENT_PATH/config/systemd/ /etc/systemd/system/myapp. Bei der Bereitstellung ändert sich nun der Pfad, auf den der Symlink zeigt (aufgrund des von Capistrano verwalteten Symlinks), und Sie müssen nur die Prozesse neu starten.

+0

Danke, können Sie den vollständigen Code für Ihre Aufgabe teilen? Ich erinnere mich, Systemd Probleme mit Symlinks, aber vielleicht wurde es in den letzten Versionen gelöst. – dimid

1

Dies scheint zu arbeiten, aber ich frage mich immer noch, wenn es zu beachten, auch

namespace :deploy do 
    [...] 

    before :published, :systemd 
    desc 'systemd integration' 
    task :systemd do 
    on roles(:web), in: :groups, limit: 3, wait: 10 do 
     within shared_path do 
     execute "sudo cp #{shared_path}/config/puma.service /etc/systemd/system/puma.service" 
     execute "sudo cp #{shared_path}/config/puma-init /usr/bin/puma-init" 
     execute "sudo systemctl daemon-reload" 
     execute "sudo systemctl restart puma" 
     end 
    end 
    end 
end 

eine elegantere Lösung ist, dass Sie

set :pty, true 

Ansonsten sudo wird nicht funktionieren zu

brauchen.