Me gustaría ejecutar una tarea de rake en mi controlador. ¿Hay alguna manera de hacer esto?Ejecutar tarea de rake en el controlador
Respuesta
No me parece un buen estilo para llamar a una tarea de rake en el código. Recomiendo poner el código para la tarea que desea ejecutar en algún lugar fuera de una tarea de rake, y hacer que la tarea de rake llame a este código.
Esto no solo tiene la ventaja de ser fácil de llamar al rake externo (que es lo que desea), sino que también hace que sea mucho más fácil probar la tarea de rake.
+1 Estoy de acuerdo: este es un ejemplo perfecto de cosas que deben ser refactorizadas y llamadas de dos maneras diferentes. –
http://railscasts.com/episodes/127-rake-in-background Parece una excelente razón para ejecutar un rake .. – baash05
¿Dónde estaría un buen "lugar" para "algún lugar fuera de la tarea de rake"? – user456584
Usted puede hacer esto en su controlador:
%x[rake name_task]
con: name_task
es el nombre de su tarea
¿cómo le pasas el entorno? – serengeti12
nunca pagaría en mi controlador en producción. – Duke
@Duke cuando responde o comenta puede también explicar su razonamiento y no solo hacer una afirmación (que un controlador en producción no debe llamar a las tareas de rake)? Esto ayudaría a las personas a comprender su razonamiento en lugar de simplemente saber lo que no haría (pero no escuchar su explicación de por qué). – Matt
Estoy de acuerdo con ddfreynee, pero en caso de que sabe lo que necesita código puede verse como:
require 'rake'
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Sample::Application.load_tasks # providing your application name is 'sample'
class RakeController < ApplicationController
def run
Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.
Rake::Task[params[:task]].invoke
end
end
En su lugar puede necesitar 'rake' y .load_tasks en un inicializador.
En lugar de intentar llamar a una tarea de rake en un controlador, llame a un servicio de objetos que contenga la lógica que esté intentando ejecutar.
class SomeController < ApplicationController
def whatever
SomeServiceObject.call
end
end
... y luego, suponiendo que estamos hablando de una tarea personalizada rastrillo, que se llama el objeto de servicio, así:
namespace :example do
desc 'important task'
task :important_task do
SomeServiceObject.call
end
end
En caso de que usted no está familiarizado con los objetos de servicio, se son simplemente viejas clases de rubíes que hacen un trabajo específico. Si está intentando llamar a algunas de las tareas de rake predeterminadas (es decir: db: migrate), le recomendaría no hacer ese tipo de cosas desde un controlador.
Esta es una forma muy limpia de hacerlo. Gracias. – juliangonzalez
- 1. Rails cómo ejecutar la tarea de rake
- 2. Ejecutar el carpincho en la tarea de rake
- 3. tarea de rake multiproceso
- 4. Rake: tarea equivalente en Django
- 5. Tarea de Rake: manejo de errores
- 6. ¿Cómo puedo pasar parámetros a una tarea rake que se invoca usando Rake :: Tarea
- 7. Rake: iniciando cualquier tarea ejecutando
- 8. ejecutar la tarea de rake en 'producción' y especificar el entorno?
- 9. ¿Cómo puedo llamar a una acción de controlador desde una tarea de rake?
- 10. Cómo perfilar la tarea de Rake?
- 11. Rake 0.9.0 'método' no definido 'tarea' '
- 12. ¿Cómo obtener el PID de la tarea de rake actual?
- 13. Ejecutar el inicializador solo para las tareas de Rake
- 14. ¿Cómo omito la carga de los inicializadores de Rails al ejecutar una tarea de rake?
- 15. cómo pasar múltiples parámetros para rake tarea
- 16. Tratar con la tarea de rake de ejecución muy larga
- 17. Prueba de una tarea de rake en rspec (y pepino)
- 18. ¿Cómo puedo ejecutar una tarea de rake desde un trabajo retrasado?
- 19. ¿Es posible realizar una tarea de Rake interactiva?
- 20. Ejecutar fondo Tarea En Javascript
- 21. tarea predeterminada de espacio de nombres en Rake
- 22. Prueba de un método definido en una tarea de rake
- 23. ¿Cómo puedo acelerar la tarea de Ruby/Rake?
- 24. ¿Cómo uso "obtiene" en una tarea de rake?
- 25. alias del nombre de la tarea en Rake
- 26. ¿Cuál es la tarea de 'medio ambiente' en Rake?
- 27. cómo hacer una vista rabl en una tarea de rake?
- 28. ¿Cómo fuerzo a RAILS_ENV en una tarea de rake?
- 29. ¿Ejecuta una tarea de Rake desde la migración?
- 30. ¿Cómo ejecutar tareas de rake desde la consola?
http://railscasts.com/episodes/127-rake-in-background – baash05
intente esto >> 'system" rake task_name "' – Bongs
Ryan Bates cubre [un par de formas] (http://railscasts.com/episodes/127-rake-in-background) en RailsCasts Episodio # 127. –