rails中的delayeded_job引发'nil object'错误

时间:2012-04-05 22:44:22

标签: ruby-on-rails ruby amazon-s3 delayed-job

我正在努力使用Delayed_job(Rails 2.3.8应用程序中的集体构思v2.0)。

我正在从application_controller方法调用该作业:

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

docs是带有id和文件名的哈希。

在我的Lib目录中,我有类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

问题在于它正在提升: S3MoverJob因NoMethodError失败:当你没想到它时你有一个nil对象!

我查看了数据库中的处理程序,它正在向执行方法传递带有id和文件名列表的Yaml文件,如下所示:

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

我错过了什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我认为你应该为调试提供更多信息。 如:在“执行方法”下添加“Rails.logger.info”之类的语句,以查看异常抛出的位置

答案 1 :(得分:0)

我的错。我不知道这是一个独立的过程,需要一些要求:

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

之后,一切正常。

非常感谢。