web-dev-qa-db-fra.com

Définir l'étape par défaut avec Capistrano 3

Existe-t-il un moyen de définir une étape par défaut dans Capistrano 3?

J'ai essayé de mettre set :stage, :production dans deploy.rb mais cela n'a pas fonctionné, cela donne l'erreur:

Stage not set, please call something such as `cap production deploy`,
where production is a stage you have defined

Je n'ai qu'une seule étape en ce moment, donc je veux pouvoir exécuter simplement cap deploy et l'exécuter par défaut.

28
Brad Dwyer

Capistrano v3 est en quelque sorte un wrapper autour de Rake, vous devez donc réaliser que ce qui se passe réellement est qu'une tâche production est exécutée en premier, suivie d'une tâche deploy.

Si vous le déboguez un peu, vous constaterez que deploy.rb ne se charge pas lorsque vous ne tapez pas de scène. C'est parce que la tâche de l'étape est où deploy.rb se charge: En regardant lib/setup.rb , une tâche est définie pour chaque étape. Lors de l'exécution, la tâche de l'étape définit :stage, charge les valeurs par défaut de capistrano, puis charge enfin votre deploy.rb fichier.

Ainsi, une astuce simple serait de dire à Capistrano d'appeler la tâche de l'étape à chaque fois que vous exécutez cap en l'ajoutant à la fin de votre Capfile ( pas votre deploy.rb):

Rake::Task[:production].invoke

ou, en utilisant la méthode invoke de la DSL de Capistrano:

invoke :production

Cela peut avoir des conséquences inattendues si vous utilisez réellement plusieurs étapes, mais si vous n'utilisez que l'étape production, cela devrait fonctionner correctement.

Une autre solution simple pourrait être un simple alias Shell, tel que alias cap='cap production', mais cela peut ne pas fonctionner correctement si vous avez plusieurs projets avec des noms de scène différents.

32
Dylan Markow

Après avoir _ cd dans le répertoire Rails Root, lancez la commande:

cap development deploy

semble fonctionner. Plus tôt, j'étais dans le dossier app/models et l'émission de la commande est revenue avec cette erreur:

Stage not set, please call something such as cap production deploy, where production is a stage you have defined.

3
Sam V

L'ancienne solution fonctionne pour moi dans Capistrano 3:

cap --version
#=> Capistrano Version: 3.3.5 (Rake Version: 10.4.2)

Tout en haut du Capfile après ces lignes

# Load DSL and Setup Up Stages
require 'capistrano/setup'

ajouter:

set :stage, :production

puis exécutez votre tâche comme d'habitude sans l'étape spécifiée:

cap foo:bar
2
Peter

Nouvelle réponse pour capistrano 3.6+: il vaut mieux utiliser invoke :production unless Rake.application.options.show_tasks pour éviter l'avertissement que vous obtiendriez autrement avec cap -T

1
Nikolay Rys