2012-04-05 11 views
0

Ich habe Schwierigkeiten, Delayed_job (Kollektiv Idee v2.0 in einer Rails 2.3.8 App) zu verwenden.Delayed_job in Schienen, die "Null Objekt" Fehler

Ich rufe den Job von einer application_controller Methode:

... 
Delayed::Job.enqueue(S3MoverJob.new(docs)) 

Wo docs ist ein Hash mit IDs und Namen der Dateien.

In meinem Lib-Verzeichnis habe ich die Klasse S3MoverJob:

class S3MoverJob < Struct.new(:docs) 

    def perform 
    #setup connection to Amazon 
    ... 
    #connect 
    ... 

    #loop to move files not transfered already 
    docs.each do |id,file_name| 
    # Move file 
     begin 
     doc = Document.find(id) 
     ... perform actions 
     rescue Exception => exc 
     raise "failed!" 
     end 
    end 
    end 

end 

Das Problem ist, dass es erhöht: S3MoverJob fehlgeschlagen mit NoMethodError: Sie haben ein Null-Objekt, wenn Sie es nicht erwartet!

Ich schaute in den Handler, in der DB, und es wurde mit der Liste der IDs und Dateinamen dem ausführen Methode, um die YAML-Datei liefern, wie folgt aus:

docs: 
    3456: name_of_file_01.png 
    4567: name_of_file_02.txt 

Was bin ich? Danke für die Hilfe.

+1

Sie können einige Antworten für die Fragen, die Sie zuvor gestellt haben, als akzeptiert markieren, sonst wird niemand Ihnen antworten wollen. –

+0

Ein Stacktrace wäre hilfreich. – betamatt

+0

Was es wirft (Entwicklung): '[Worker (Host: iMac pid: 1789)] Starten von Job Worker [Worker (Host: iMac pid: 1789)] S3MoverJob fehlgeschlagen mit NoMethodError: Sie haben ein Nullobjekt, wenn Sie didn erwarte es nicht! Sie haben möglicherweise eine Instanz von ActiveRecord :: Base erwartet. Der Fehler trat bei der Auswertung von null auf. [] - 0 fehlgeschlagene Versuche [Worker (host: iMac pid: 1789)] 1 Jobs bei 68.9376 j/s verarbeitet, 1 fehlgeschlagen ... [Worker (Host: iMac pid: 1789)] S3MoverJob ist mit NoMethodError fehlgeschlagen: Sie haben ein Nil-Objekt, wenn Sie es nicht erwartet haben! ' – Valadares

Antwort

0

Meine Schuld. Ich wusste nicht, es ein idenpendent Prozess ist und einige Anforderungen erforderlich:

require 'yaml' 
require 'uri' 
class Document < ActiveRecord::Base 
end 

Danach funktioniert alles einwandfrei.

Danke trotzdem.

0

Ich denke, Sie sollten mehr Informationen für Debug geben. Wie: Fügen Sie Anweisungen wie 'Rails.logger.info' einige Sachen '' unter der perform -Methode hinzu, um zu sehen, wo die Ausnahme geworfen wurde

+0

Ich habe Teile des Codes kommentiert und eine Ausnahme ausgelöst: docs.each do | id, Dateiname | Wahrscheinlich erkennt es nicht den Hash, den ich ihm richtig gesandt habe. – Valadares