J'ai fini de poster une question sur le capistrano de la liste des utilisateurs ici, et a obtenu la réponse suivante à partir Jamis (modifié un peu par moi ici, pour plus de clarté):
Essayez les HÔTES de la variable d'environnement:
cap HOSTS=app2.example.com production deploy
Notez que cette opération permettra de traiter app2 comme dans tous les rôles, et pas seulement
peu importe le rôle(s), il arrive à être déclarée.
Si ce que vous voulez est de faire régulièrement déployer, mais seulement agir sur app2, et
seulement comme app2 est déclarée dans votre recette de fichier, vous pouvez utiliser le HOSTFILTER
variable à la place:
cap HOSTFILTER=app2.example.com production deploy
[...]
Considérons cet exemple concret. Supposons que votre
script définit trois serveurs, A, B, et C. Et il définit une tâche, "foo",
que (par défaut) veut courir sur A et B, mais pas C. Comme ceci:
role :app, "A", "B"
role :web, "C"
task :foo, :roles => :app do
run "echo hello"
end
Maintenant, si vous ne cap foo
, il va exécuter la commande echo à la fois A et B.
Si vous n' cap HOSTS=C foo
, il va exécuter la commande echo sur C,
indépendamment de l' :rôles paramètre de la tâche.
Si vous n' cap HOSTFILTER=C foo
, il ne sera pas exécuté la commande echo à
tout, parce que l'intersection de (A B) et (C) est un ensemble vide. (Il n'y
sont pas des hôtes dans foo liste des hôtes qui correspondent C.)
Si vous n' cap HOSTFILTER=A foo
, il va exécuter la commande echo sur seulement
Un, parce que (A B) a recoupé avec (Un) (Un).
Enfin, si vous n' cap HOSTFILTER=A,B,C foo
, il va exécuter l'echo
commande sur A et B (mais pas de C), parce que (A B) a recoupé avec (A B C)
(B).
Pour résumer: les HÔTES se substitue complètement les hôtes ou les rôles de la déclaration de
de la tâche, et les forces de tout à l'encontre de l'hôte spécifié(s).
Le HOSTFILTER, sur l'autre main, il suffit de filtres existants hôtes
contre la liste donnée, en ne choisissant que les serveurs qui sont déjà en
les tâches de la liste des serveurs.