Ya tengo un archivo deploy.rb que puede implementar mi aplicación en mi servidor de producción.
Mi aplicación contiene una tarea de rake personalizada (un archivo .rake en el directorio lib / tasks).
Me gustaría crear una tarea de límite que ejecutará de forma remota esa tarea de rake.
ruby
rake
capistrano
Richard Poirier
fuente
fuente
#{rake}
variable de capistrano ? Parece que no siempre es la mejor opción.Respuestas:
Un poco más explícito, en su
\config\deploy.rb
, agregue fuera de cualquier tarea o espacio de nombres:Entonces, desde
/rails_root/
, puede ejecutar:fuente
... un par de años después ...
Eche un vistazo al complemento de rieles de capistrano, puede ver en https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 que puede verse como:
fuente
run
funcionará en capistrano hasta la versión 2. de la versión 3 este es el camino a seguir.Capistrano 3 Versión genérica (ejecuta cualquier tarea de rastrillo)
Construyendo una versión genérica de la respuesta de Mirek Rusin:
Uso de ejemplo:
cap staging "invoke[db:migrate]"
Tenga en cuenta que
deploy:set_rails_env
require proviene de la gema capistrano-railsfuente
rake args[:command]
conexecute :rake, "#{args.command}[#{args.extras.join(",")}]"
puede ejecutar una tarea con múltiples argumentos como este:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Prefiero este enfoque al que mencionas porque refleja la invocación real de rake. Con este enfoque también se puede encadenar múltiples tareas, lo cual es a menudo útil:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Funciona para rake 10.2.0 o posteriorLo encontré con Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
El
RAILS_ENV=production
era un Gotcha - Yo no pienso en ello al principio y no podía entender por qué la tarea no estaba haciendo nada.fuente
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Usa invocaciones de rake al estilo Capistrano
Hay una forma común con la que "simplemente funcionará"
require 'bundler/capistrano'
y otras extensiones que modifican el rake. Esto también funcionará con entornos de preproducción si usa varias etapas. ¿La esencia? Use config vars si puede.fuente
top.run
run
top
método . En el caso en el que hayamos definidorun
en el mismo espacio de nombres,top.run
es obligatorio; de lo contrario, debería encontrar el nivel superiorrun
incluso cuando la tarea tenga un espacio de nombres. ¿Me he perdido algo? ¿Qué pasó en tu caso?Usa la
capistrano-rake
gemaSimplemente instale la gema sin meterse con recetas personalizadas de capistrano y ejecute las tareas de rake deseadas en servidores remotos como este:
Divulgación completa: lo escribí
fuente
Yo personalmente uso en producción un método auxiliar como este:
Eso permite ejecutar una tarea de rake similar a usar el método de ejecución (comando).
NOTA: Es similar a lo que propuso Duke , pero yo:
fuente
Hay una capa de gemas interesante que hace que sus tareas de rastrillo estén disponibles como tareas de Capistrano, para que pueda ejecutarlas de forma remota.
cape
está bien documentado, pero aquí hay una breve descripción general sobre cómo configurarlo.Después de instalar la gema, simplemente agregue esto a su
config/deploy.rb
archivo.Ahora, puede ejecutar todas sus
rake
tareas de forma local o remotacap
.Como beneficio adicional, le
cape
permite configurar cómo desea ejecutar su tarea de rake de manera local y remota (no másbundle exec rake
), solo agregue esto a suconfig/deploy.rb
archivo:fuente
fuente
RAILS_ENV=production
aRAILS_ENV=#{rails_env}
permite que funcione también en mi servidor de ensayo.Esto es lo que puse en mi deploy.rb para simplificar la ejecución de tareas de rake. Es una simple envoltura del método run () de capistrano.
Entonces simplemente ejecuto cualquier tarea de rastrillo así:
fuente
Esto funcionó para mí:
Entonces simplemente corre
cap production "invoke[task_name]"
fuente
La mayor parte es de la respuesta anterior con una mejora menor para ejecutar cualquier tarea de rake desde capistrano
Ejecute cualquier tarea de rake de capistrano
fuente
Esto también funciona:
Más info: Capistrano Run
fuente
Si desea poder pasar varios argumentos, intente esto (según la respuesta de marinosbern):
Entonces puedes ejecutar una tarea como esta:
cap production invoke["task","arg1","arg2"]
fuente
Entonces he estado trabajando en esto. parece que funciona bien. Sin embargo, necesita un formateador para aprovechar realmente el código.
Si no desea utilizar un formateador, simplemente configure el nivel de registro en modo de depuración. Estos semas ah
Cosas de gorra
Este es el formateador que construí para trabajar con el código anterior. Se basa en: textsimple integrado en el sshkit, pero no es una mala forma de invocar tareas personalizadas. Oh, muchos no funcionan con la versión más reciente de sshkit gem. Sé que funciona con 1.7.1. Digo esto porque la rama maestra ha cambiado los métodos SSHKit :: Command que están disponibles.
fuente
Las respuestas anteriores no me ayudaron y encontré esto: De http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
para ejecutar su tarea use
Tal vez sea útil para alguien
fuente