2010-01-19 12 views
3

J'essaye de configurer plusieurs rôles, un pour live, et un autre pour dev. Ils ressemblent à ceci:Déployer sur un seul rôle/serveur avec capistrano

role :live, "example.com" 
role :dev, "dev.example.com" 

Quand je lance deploy cap, cependant, il exécute pour les deux serveurs. J'ai essayé ce qui suit et il exécute toujours sur les deux.

cap deploy live 
cap ROLE=live deploy 

Qu'est-ce qui me manque? Je sais que je peux écrire une tâche personnalisée qui ne répond qu'à un seul rôle, mais je ne veux pas avoir à écrire tout un tas de tâches juste pour lui dire de répondre à un rôle ou un autre. Merci!

+0

Toutes les réponses ci-dessous sont source de confusion/Incorrect. ROLES n'agit pas comme un filtre; il indique plutôt à Capistrano d'exécuter toutes les tâches liées à ce rôle. Voir https://groups.google.com/forum/#!topic/capistrano/4gTyvcAtyAg – steakchaser

Répondre

3

Vous pouvez faire quelque chose comme ceci:

task :dev do 
    role :env, "dev.example.com" 
end 

task :prod do 
    role :env, "example.com" 
end 

Ensuite, utilisez:

cap dev deploy 
cap prod deploy 
+0

Très bonne idée! –

12

Capistrano multicellulaires est certainement la solution à l'exemple que vous avez publié pour le déploiement d'environnements. En ce qui concerne votre question de déploiement sur des rôles ou des serveurs, Capistrano propose également des solutions de ligne de commande.

Pour déployer un seul rôle (avis RÔLES est au pluriel):

cap ROLES=web deploy 

Pour déployer à plusieurs rôles:

cap ROLES=app,web deploy 

Pour déployer au serveur particulier (HOSTS Avis est pluriel):

cap HOSTS=web1.myserver.com deploy 

pour déployer plusieurs serveurs:

cap HOSTS=web1.myserver.com,web2.myserver.com deploy 

Pour déployer sur un serveur (s) avec un rôle (s):

cap HOSTS=web1.myserver.com ROLES=db deploy 
2

Encore un conseil: si vous utilisez rappelez plusieurs étapes à mettre RÔLES constante avant la commande cap.

ROLES=web cap production deploy 

ou après environnement

cap production ROLES=web deploy 

Si vous mettez en premier paramètre, multicellulaire traitera comme nom de scène et le remplacer par défaut un:

cap ROLES=web production deploy 

* [...] executing `dev' 
* [...] executing `production'