7 Stimmen

Wie kann ich eine Controller-Aktion aus einem Rake-Task aufrufen?

Ich habe eine Controller-Aktion, die eine Reihe von Excel-Berichten generiert, was etwa 10 Minuten in Anspruch nimmt. Manchmal rufe ich es aus meiner Webapp auf, weshalb es eine Aktion ist.

Aber ich möchte auch einen Rake-Task erstellen, um dies auszuführen, so dass ich es automatisch einmal pro Nacht ausführen lassen kann.

Gibt es eine Möglichkeit, dies zu tun?

0 Stimmen

Wie die anderen schon sagten, müssen Sie den Code in ein Modell verschieben. Dinge auf Controllern zu tun, ist eine schlechte Praxis.

3voto

John Topley Punkte 110122

Können Sie die Erstellung von Berichten aus Ihren Modellen übernehmen? Modelle sollte die meiste Arbeit ohnehin erledigen und kann von Rake-Aufgaben aus aufgerufen werden:

task :reports => :environment do
  ...
  # Do stuff with your models.
end

1 Stimmen

Ich glaube nicht, ich muss XML-Vorlagen rendern, um die Excel-Berichte zu erstellen.

3voto

edebill Punkte 7515

Ich denke, Sie müssen Ihren Code in Ihr Modell verschieben. Da es schlecht ist, Wissen über das Ausgaberendering in Modelle zu packen, würde ich vorschlagen, die gesamte Geschäftslogik und die Datenmanipulation in das Modell zu packen, aber den Rendering-Code in Ihre Rake-Task zu packen. Das würde den Rake-Task analog zum Controller im Web machen - und die Trennung der Anliegen aufrechterhalten.

Sie können sich ActionView::Base ansehen und von dort aus herausfinden, wie Sie das Rendern von Vorlagen auslösen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X