web-dev-qa-db-fra.com

Comment exécuter des commandes Shell sur un serveur dans Capistrano v3?

Je suis nouveau chez Capistrano et j’ai essayé d’utiliser le DSL de Capistrano pour exécuter des commandes Shell sur le serveur ('exécuter', 'exécuter', etc.), mais il semble que cela soit devenu obsolète. Après avoir recherché et recherché un équivalent fonctionnel, je suis toujours perdu.

Code actuel:

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

Sortie:

    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
72
Jgod

Dans Capistrano v3, vous devez spécifier où vous voulez exécuter le code en appelant on avec une liste de noms d’hôte, par exemple.

task :execute_on_server do
  on "[email protected]" do
    execute "some_command"
  end
end

Si vous avez des rôles configurés, vous pouvez utiliser la méthode roles comme commodité:

role :mailserver, "[email protected]"

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

Il existe une documentation v3 ici: http://www.capistranorb.com/

114
lmars