2

Web サイトをスクレイピングしたいのですが、これを別のワーカー プロセスで行う必要があります。バックグラウンドでジョブを実行する遅延ジョブについて知りました。Railsアプリケーションでcollectiveidea/delayed_jobを使用しています.Rails 3.0とアクティブレコードのインストール手順に従いました。

その後、libファイルにdj.rbを作成し、次のようにコードを書きました。

require 'nokogiri'
require 'open-uri'
class Dj_testing
  def perform
    #code for scraping the site
    #code to add entry into database 
  end
end

その後、次のコマンドを使用してワーカーを開始します

スクリプト/delayed_job 開始

レーキ ジョブ:仕事

私のワーカーが開始し、私の端末で見ることができます

[Worker(host:user1234-desktop pid:9487)] Job worker を起動中

今私の問題は、実行メソッドを直接呼び出すと正常に動作することです。つまり、次のコードは完全に機能し、サイトをスクレイピングしてデータベースにデータを入力します。

ruby-1.9.2-p0 > Dj_testing.new.perform

しかし、同じジョブを遅らせると、ジョブがdelayed_jobテーブルに追加され、何もしません:(

ruby-1.9.2-p0 > Dj_testing.delay.new

また

ruby-1.9.2-p0 > Delayed::Job.enqueue Dj_testing.new

 #<Delayed::Backend::ActiveRecord::Job id: 150, priority: 0, attempts: 0, handler: 
"---!ruby/object:Delayed::PerformableMethod \nargs: ...", last_error: nil,
run_at: "2012-04-27 05:25:29", locked_at: nil, failed_at: nil, locked_by: nil,
queue: nil,created_at:     "2012-04-27 05:25:29", updated_at: "2012-04-27 05:25:29"> 

仕事が思うように進まないのはなぜ?

4

2 に答える 2

0

メソッドを呼び出すオブジェクトで「delay」を呼び出す必要があります。したがって、あなたの場合、次のようになります。

Dj_testing.new.delay.perform

ではなく

Dj_testing.delay.new
于 2012-04-28T15:55:12.013 に答える
0

メソッドを呼び出す@salilの方法は正しいですが、他の問題に苦しんでいる可能性があります。

この投稿に対する私の回答のガイドラインに従ってください (たくさんあるので、ここには投稿しませんでした:-)) https://stackoverflow.com/a/15000180/226255

これが役立つことを願っています

于 2013-02-21T10:46:20.610 に答える