2011-08-15 9 views
4

私は現在、自分のモデルにサイトを掻き集めてレコードをデータベースに挿入する方法を持っています。delayed_jobがいつ仕事をしたかを知る方法?

def self.scrape 
    #scrape 
    #insert into database 
end 

私はそれを呼び出すために、コントローラのメソッドを設定します。

def scrape 
    Website.send_later(:scrape) 
end 

スクレイピングが働いているとコンソールを介して、それを実行することによってそれをテストしています。ただし、コントローラメソッドを呼び出すことによって起動すると、動作しませんでした。

私はそれは、次の言うrake jobs:workを試してみた:

[Worker(host:thorpe-desktop pid:6962)] Starting job worker 
[Worker(host:thorpe-desktop pid:6962)] Class#scrape completed after 0.5068 
[Worker(host:thorpe-desktop pid:6962)] 1 jobs processed at 0.5898 j/s, 0 failed ... 

私はそれはデータが挿入されている必要があり、データベースのテーブルには何も表示されません。

答えて

2

ジョブが実行され完了したかどうかを判断する方法として、delayed_jobが提供するフックを使用して、job_statusモデルに小さなレコードを書き込むことができます。この場合に便利なフックがいくつかありますが、最も興味深いのは次のとおりです。

def after(job) 
    record_stat 'newsletter_job/after' 
end 

同様に使用できる成功と終了の類似点があります。これはあなたが望むよりも重くなるかもしれないが、あなたが望むことをし、コストに見合った価値があるかもしれないことを理解しています。 delayed_jobテーブルは、あなたが望むものほど十分な情報を保持していないようです。

1

この質問polling with delayed_jobには、遅延したジョブがいつ終了したかを追跡する方法がよく説明されています。

関連する問題