0

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オブジェクトを持っています!

DB内のハンドラーを調べたところ、次のようにIDとファイル名のリストを含むYamlファイルがperformメソッドに配信されていました。

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

私は何が欠けていますか?私を助けてくれてありがとう。

4

2 に答える 2

0

デバッグのためにもっと情報を入れるべきだと思います。例:performメソッドの下に'Rails.logger.info "some stuff"'のようなステートメントを追加して、例外がスローされた場所を確認します

于 2012-04-06T04:43:06.817 に答える
0

私のせい。私はそれが同一のプロセスであり、いくつかの要件が必要であることを知りませんでした:

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

その後、すべてが正常に動作します。

とにかくありがとう。

于 2012-04-07T12:59:40.200 に答える