Railsバッチタスクサンプル

Railsバッチタスクサンプル

Railsでバッチは2種類あるようです。

runnerとtaskがあり、今回はtaskを使用してみました。サンプルをのせます。

コミックをクロールするタスク /lib/tasks/task_crawler.rake を作りました。

Comicモデルなど予め準備しておく必要がありますが、そこは消して

namespace :task_comic_crawler do
  desc "コミックをクロールしてコミックページを取得・更新する"
  task :crawl => :environment do
    require 'rss'
    # コミックテーブルループ
    @comics = Comic.all
    @comics.each do |c|
      # XMLではMechanizeを使用出来ないのでHTTP.getを使用する
      xml = Net::HTTP.get(URI.parse(c.check_url))
      is_update_comic_page = false
      RSS::Parser.parse(xml).items.map do |item|
        puts item.title
        # 既存コミックページデータチェック
        @old_comic_pages = ComicPage.where(url: item.link).or(ComicPage.where(title: item.title)).limit(1)
        if @old_comic_pages.present?
          puts 'exist comic_page'
        else
          puts 'not exist comic_page'
          # コミックページ更新
          @comicPage = ComicPage.new(
            comic_id: c.id,
            update_datetime: item.pubDate,
            url: item.link,
            title: item.title,
            thumbnail_org: item.enclosure.url,
            summary: '',
          )
          if @comicPage.save
            puts 'comicPage save'
            is_update_comic_page = true
          end
        end
      end
      # コミッククロールログ更新
      @comicCrawlLog = ComicCrawlLog.new(
        comic_id: c.id,
        execute_datetime: Time.current,
        is_update: is_update_comic_page,
      )
      if @comicCrawlLog.save
        puts 'comicCrawlLog save'
      end
    end
  end
end

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です