significado rails golondrinas california ruby-on-rails ruby capistrano

ruby on rails - rails - Establecer escenario por defecto con Capistrano 3



capistrano ruby (5)

¿Hay una manera de establecer un escenario predeterminado en Capistrano 3?

He intentado poner set :stage, :production ,: set :stage, :production en deploy.rb pero eso no funcionó, da el error:

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

Solo tengo una etapa en este momento, por lo que quiero poder ejecutar el cap deploy y hacer que se ejecute de forma predeterminada.


Capistrano v3 es algo así como un envoltorio alrededor de Rake, por lo que debe darse cuenta de que lo que realmente está sucediendo es que una tarea de production se ejecuta primero, seguida de una tarea de deploy .

Si lo depura un poco, encontrará que deploy.rb no se carga cuando no escribe una etapa. Esto se debe a que la tarea de la etapa es donde se carga deploy.rb : Al mirar lib/setup.rb , se define una tarea para cada etapa. Cuando se ejecuta, la tarea del escenario establece :stage , carga los valores predeterminados de capistrano y, finalmente, carga su archivo deploy.rb .

Por lo tanto, un truco fácil sería decirle a Capistrano que invoque la tarea del escenario cada vez que ejecute cap agregando esto al final de su Capfile ( no su deploy.rb ):

Rake::Task[:production].invoke

o, usando el método de invoke del DSL de Capistrano:

invoke :production

Esto puede tener algunas consecuencias no deseadas si realmente usa varias etapas, pero si solo usa la etapa de production , debería funcionar bien.

Otra solución fácil podría ser un simple alias de shell, como alias cap=''cap production'' , pero podría no funcionar bien si tiene varios proyectos con diferentes nombres de etapas.


Después de que yo cd en el directorio raíz de RAILS, emitiendo el comando:

cap development deploy

parece funcionar. Anteriormente estuve en la carpeta de aplicaciones / modelos y emití el comando con este error:

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


La vieja solución me funciona en Capistrano 3:

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

En la parte superior del Capfile después de estas líneas

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

añadir:

set :stage, :production

y luego ejecute su tarea como de costumbre sin la etapa especificada:

cap foo:bar


Nueva respuesta para capistrano 3.6+: es mejor usar invoke :production unless Rake.application.options.show_tasks para evitar la advertencia que de lo contrario obtendría con cap -T


Puede agregar la siguiente línea a su deploy.rb, lo que evitará que Capistrano espere una etapa:

set :stages, ["production"]