Wie führe ich Shell-Befehle auf dem Server in Capistrano v3 aus?


74

Ich bin neu in Capistrano und habe versucht, mit Capistranos DSL Shell-Befehle auf dem Server auszuführen ('Ausführen', 'Ausführen' usw.), aber es scheint, dass es veraltet ist. Nachdem ich nach einem funktionalen Äquivalent gesucht und gesucht habe, bin ich immer noch verloren.

Aktueller Code:

desc 'Do something'
task :do_something
  execute 'echo sometext'
end

Ausgabe:

    cap aborted!
    undefined method `execute' for main:Object
    /Users/Justin/Dropbox/xxxx/xxxx/xxxx/Capfile:45:in `block (2 levels) in <top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/lib/capistrano/application.rb:12:in `run'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/bin/cap:3:in `<top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `load'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `<main>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `<main>'
    Tasks: TOP => deploy:do_something

Ich hatte genau das gleiche Problem mit den Methoden "info" und "error" - das gleiche Problem, da die Methoden zu SSHKit gehören und sich in einem SSHKit-Block befinden müssen.
Dave Burt

Antworten:


118

In Capistrano v3 müssen Sie angeben, wo Sie den Code ausführen möchten, indem Sie onmit einer Liste von Hostnamen aufrufen , z

task :execute_on_server do
  on "root@example.com" do
    execute "some_command"
  end
end

Wenn Sie Rollen eingerichtet haben, können Sie die rolesMethode als Annehmlichkeit verwenden:

role :mailserver, "root@mail.example.com"

task :check_mail do
  on roles(:mailserver) do
    execute "some_command"
  end
end

Hier finden Sie einige v3-Dokumentationen: http://www.capistranorb.com/


8
Genial, ich wünschte, sie hätten es in der exemplarischen Vorgehensweise klarer gemacht. Sie verwenden nur Test, Info usw.
Jgod

2
Die Capistrano- executeMethode basiert auf der Implementierung in sshkit. Weitere Informationen finden Sie derzeit executehier: Die Dokumentation zu github.com/leehambley/sshkit Capistrano 3 ist noch unvollständig.
Tombart

@KitHo Ja, Sie können sudo genauso verwenden wie eine manuelle ssh-Verbindung.
Benubird

3
Wenn ich das gleiche Problem mit den Methoden 'info' und 'error' hatte, habe ich run_locally { ... }eher als verwendet on ... { ... }. Dadurch gelangen Sie in den SSHKit-Kontext, ohne eine Verbindung zu einer Remote-Box herzustellen.
Dave Burt
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.