Capistrano 3 tirando arguments de línea de command

Estoy en el process de actualizar de Capistrano 2 a Capistrano 3. En el Cap 2 estaba usando lo siguiente para tomar un argumento de línea de command como el nombre de la twig (de lo contrario, prefijo a master )

 set :branch, fetch(:branch, "master") 

Si llamé a cap deploy , implementaría la twig principal. Pero también me permite hacer algo como esto:

 cap deploy -S branch=foo 

Que desplegaría la twig foo .

Ahora, en Capistrano 3, si bash ejecutar lo anterior, aparece un error: invalid option: -S .

¿Cuál es la forma correcta de pasar una discusión a través de la línea de command ahora?

Las tareas de Rake (que tapa está usando) son arguments de apoyo.

 namespace :test do desc "Test task" task :test, :arg1 do |t, args| arg1 = args[:arg1] puts arg1 end end 

tapa -T salidas:

cap yiic: testing [arg1] # tarea de testing

Ejemplo de invocación:

cap producción yiic: test [test1]

Además, aquí hay una publicación útil

PD: debe usar env vars para configuraciones "globales". Al igual que los valores comunes para múltiples tareas.

Lo que terminé haciendo fue establecer una variable ENV .

Entonces ahora puedo llamar

 cap production deploy branch=mybranch 

Y desplegará mybranch . Si ejecuto un simple cap production deploy desplegará la twig pnetworkingeterminada ( master si no establece uno, pero he cambiado el mío a la default para demostrarlo)

Este es el código que puse en mi file deploy.rb :

 set :branch, "default" if ENV['branch'] set :branch, ENV['branch'] end 

Ofrecer una solución actualizada y funcional para Capistrano 3 (ya que me tomó un time encontrarla y demasiadas testings para que funcione).

Mis files son como:

 config/ deploy/ staging.rb production.rb deploy.rb ... Capfile 

En staging.rb tengo:

 server 'staging', roles: %w(db) set :branch, ENV.fetch('REVISION', 'master') set :use_sudo, false set :user, 'toto' set :deploy_to, '/var/www' 

(En el server 'staging' , la staging es una connection SSH, definida en mi .ssh/config )

Luego, para implementar una revisión específica, solo necesito llamar:

 cap staging deploy REVISION=3b2d9ab 

Donde 3b2d9ab es el hash de confirmación de Git (versión corta o larga).