2010-12-02 13 views

Répondre

34

Vous pouvez le faire en utilisant l'espace de noms:

namespace :test do 
    task :one do 
    end 
    task :two do 
    test.one 
    #or just directly call it: 
    one 
    end 
end 

juste être prudent avec le nom vous utilisez pour ne pas écraser une fonction importante.

+4

Alors pourquoi cela ne fonctionne pas? 'tâche: d,: rôles => [: app] do déployer end' –

+0

Remarque: vous ne devez pas utiliser l'espace de noms' test' car il ombrage une méthode Capistrano existante portant ce nom. Vous obtiendrez un argument ArgumentError. –

+0

ouais désolé pour cela, ce n'était qu'un exemple, je suppose que vous allez choisir un espace de noms plus significatif. – mpapis

5

En général, vous faites cela en définissant les dépendances:

before :bar, :foo 
90

Pour mémoire: dans le Capistrano 3, utiliser invoke(), par ex.

desc "Task that does something" 
task :do_something do 
    invoke 'namespace:task' 
end 

Plus sur https://github.com/capistrano/capistrano#before--after

+11

juste une note: 'invoke' doit être directement à l'intérieur de la' task', pas de 'on',' within' ou d'autres blocs. sinon ça ne marchera pas. –

+0

Comment réutiliser une tâche dans le bloc d'une autre tâche? – kaizenCoder

+0

@aspiringCodeArtisan, l'un des cas d'utilisation est la création d'une tâche générale pour une série de petits. –

1

Si la tâche réside dans un autre espace de noms, vous pouvez utiliser find_and_execute_task à la place.

2

vous pouvez également utiliser Rake::Task["namespace:task"].invoke, cela fonctionne