rails generate example commands ruby-on-rails ruby rake

ruby-on-rails - generate - ruby on rails rake



Ejecutar tarea de rake en el controlador (4)

Me gustaría ejecutar una tarea de rake en mi controlador. ¿Hay alguna manera de hacer esto?


En lugar de tratar de llamar a una tarea de rake en un controlador, llame a un servicio de objetos que contenga cualquier lógica que esté tratando de ejecutar.

class SomeController < ApplicationController def whatever SomeServiceObject.call end end

... y luego, suponiendo que esté hablando de una tarea de rake personalizada, haga que llame al objeto de servicio también:

namespace :example do desc ''important task'' task :important_task do SomeServiceObject.call end end

En caso de que no esté familiarizado con los objetos de servicio, son simples clases antiguas de ruby ​​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.


Estoy de acuerdo con ddfreynee, pero en caso de que sepa lo que necesita, el código puede verse así:

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 requerir ''rake'' y .load_tasks en un inicializador.


No me parece bien llamar 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.


Puedes hacer esto en tu controlador:

%x[rake name_task]

con: name_task es el nombre de tu tarea