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">
仕事が思うように進まないのはなぜ?