72 votes

Exécuter la tâche de rake dans le contrôleur

Je voudrais exécuter une tâche de rake dans mon contrôleur. Y a-t-il un moyen de faire ça?

Merci,

Sophy,

60voto

Grimmo Points 575

Je suis d'accord avec ddfreynee, mais si vous savez ce dont vous avez besoin, le code peut ressembler à ceci:

 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
 

Vous pouvez plutôt demander 'rake' et .load_tasks dans un initialiseur.

57voto

ddfreyne Points 1431

Je ne trouve pas ça de bon style d'appeler une tâche rake en code. Je recommande de mettre le code de la tâche que vous souhaitez exécuter en dehors d'une tâche rake et de laisser la tâche rake appeler ce code.

Cela a non seulement l'avantage d'être facile à appeler en dehors de rake (c'est ce que vous voulez), mais cela facilite également beaucoup le test de la tâche de rake.

16voto

olibouli Points 137

Vous pouvez le faire dans votre contrôleur:

 %x[rake name_task]
 

avec: name_task est le nom de votre tâche

6voto

Simone Carletti Points 77653

Ryan Bates couvre plusieurs aspects de l'épisode n ° 127 de RailsCasts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X