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.
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.
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.
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
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