2013-08-29 6 views
6

Ich habe eine Controller-Aktion, die asynchron behandelt werden möchte.Rails 3 delayed_job "TypeError: kann anonymes Modul nicht ablegen"

class CollectionsController < ApplicationController 
    def add 
    #code 
    end 
    handle_asynchronously :add 

Wenn diese aufgerufen wird, erhalte ich ein: Typeerror:

Die delayed_job Dokumentation nicht klar ist, nicht anonymes Modul Dump kann, ob das Verfahren eine Activerecord-Modell Methode sein muss. Ich habe Beispiele gesehen, in denen Leute andere Klassen verwenden, um damit umzugehen, jedoch verwendet meine Methode Sitzungsinformationen. Es ist mir unklar, ob diese Informationen für eine andere Klasse verfügbar wären.

Irgendwelche Ideen?

Danke.

+0

Siehe die Antwort hier: http://stackoverflow.com/questions/12956661/controller-action-to-delayed-job – fatfrog

Antwort

8

Delayed Arbeitsplätze müssen nicht ein Activerecord-Modell sein, können Sie die Funktionalität einer einfachen alten Ruby-Klasse hinzufügen können, finden Sie https://github.com/collectiveidea/delayed_job#custom-jobs

Sie wollen wahrscheinlich nicht die Controller-Aktion asynchron behandelt werden, da dies würde fügen Sie der HTTP-Anfrage eine unnötige Verzögerung hinzu. Mein Rat wäre, einen Job in der Steuerung Schlange etwa so:

class CollectionsController < ApplicationController 
    def add 
    Delayed::Job.enqueue CollectionBuilderJob.new(@current_user.session_info) 
    end 
end 

class CollectionBuilderJob < Struct.new(:session_info) 
    def perform 
    #code 
    end 
end 

Dieser Ansatz ermöglicht es Ihnen, Ihren verzögert Job in Isolation testen

5

Sie nicht DJ auf einer Controller-Methode verwenden können. Verschiebe es in ein Modell.

+2

Könnten Sie Ihre Antwort erweitern, warum ist es so? Es scheint wie der richtige. Warum auch nur in ein Modell? Warum nicht ein statischer Singleton? – vedant1811

+0

Sie können, wenn Sie Ihre Methode zu einer Klassenmethode machen, siehe hier: http://stackoverflow.com/questions/12956661/controller-action-to-delayed-job – fatfrog