2012-03-13 16 views
0

をbrassringための未定義のメソッドログの時間に1つの時間で別のエラーにぶつかっている間、私はレスキュー - NoMethodError - クラス

私のアプリ/労働者は/ brassring、バックグラウンドジョブとして以下のコードを送信するために努力しています.RBは

require File.dirname(__FILE__)+"/base_parser" 
class Brassring < BaseParser 
@queue = :Brassring_queue 
def self.perform(page) 
super page 
    ............. 
end 
    site_done 

rescue Exception => e 
def self.perform 
log "error: #{e}" 
end 

end 
end 

で、私のアプリ/労働者/ base_parser.rbは、私が

として私のlib/brassring.rbで、この使用Rescue_enqueue方法をキューイングしています

#require 'rubygems' 
require 'mechanize' 
require 'mechanize/form' 


class BaseParser 


def initialize(site) 
...... 
end 


def add_fields_to_form(form, fields) 
..... 
end 


def run 
................. 

end 




def html2text(data) 
...... 
end 


def save_result_page(url, result_params) 
............ 
end 

def get_fields_from_page(page) 
....... 
    end 

def set_site_status(status) 
........ 
end 


def update_run_counter 
....... 
end 

def site_done 
...... 
end 


def log(what) 
..... 
end 

def utf8(untrusted_string) 
....... 
end 

です

Resque.enqueue(Brassring,@site_id) 

私はすくいresqueを使用してジョブを実行しよう:作業QUEUE = * それは私の救助コントロールパネルにすることによって失敗している

NoMethodError エラー:実行」 /家庭内 未定義のメソッドlog' for Brassring:Class /home/my/to/sorc/app/workers/brassring.rb:39:in救助/my/to/sorc/app/workers/brassring.rb:5:in `perform '

またはそれを動作させるにはどうすればよいですか?アドバンス

+0

コードに/app/workers/brassring.rb:39から39行目が表示されていない場合は、追加してください。 – TomDunning

+0

また、brassring.rbに2つの 'self.perform'メソッドがあるようです。 – TomDunning

+0

ログ" error:#{e} "これは39行目です。これはスタックオーバーフローの最初の質問です。行番号を追加する方法はわかりません: ) –

答えて

0

おかげで私はあなたの問題はあなたがrescue文はRubyでどのように機能するかを誤解していることだと思います。 beginで始まり、rescueステートメントをbeginステートメントの最後に置く必要があります。ステートメントを閉じると、コードエラーが発生したときに何をすべきかを決定します。ルビーsuch as this one内の例外と救助方法について概説したガイドをお読みになることをお勧めします。

+0

申し訳ありませんが、私はルビーの例外について、むしろresqueの仕事(バックグラウンドジョブ)については話していませんでした。 –

関連する問題