3

nokogiri / feedzilla に依存するスクレイピング タスクであるレーキ タスクを実行するために、everygem https://github.com/javan/wheneverをインストールしました。

たとえば、私のタスクはgrab_bbc、grab_guardianなどと呼ばれます

私の質問 - 私は自分のサイトを更新するにつれて、さらにタスクを scheduler.rake に追加し続けます。

すべての rake タスクを実行するには、名前に関係なく config/schedule.rb に何を記述すればよいですか?

このようなものは機能しますか?

    every 12.hours do
        rake:task.each do |task|
            runner task
        end 
    end

RoR 4を使用して、Cronを初めて使用しています。

4

5 に答える 5

11
namespace :sc do
  desc 'All'
  task all: [:create_categories, :create_subcategories]

  desc 'Create categories'
  task create_categories: :environment do
    # your code
  end

  desc 'Create subcategories'
  task create_subcategories: :environment do
    # your code
  end
end

コンソールで $ rake sc:all と書く

于 2016-05-24T08:55:26.370 に答える
4

次のように、すべてのタスクを含む一意の名前空間があることを確認してください。

namespace :scrapers do

  desc "Scraper Number 1" 
  task :scrape_me do
    # Your code here
  end

  desc "Scraper Number 2"
  task :scrape_it do
    # Your code here
  end

end

次に、その名前空間のすべてのタスクを、その名前空間の外部のタスクで実行できます。

task :run_all_scrapers do
  Rake.application.tasks.each do |task|
    task.invoke if task.name.starts_with?("scrapers:")
  end
end

そうは言っても、これは一連のスクレーパーを実行する方法ではないと確信しています。何らかの理由でifパーツが true を返す必要がある場合、意図せずに次のようなタスクを実行する可能性がありますrake db:drop

「手動で」維持するschedule.rbか、マスタータスクのいずれかが、私にとってより良い選択肢のように思えます。

于 2013-09-02T21:18:28.333 に答える
1

集約されたタスクは簡潔にすることができます。

namespace :scrape do
  desc "scrape nytimes"
  task :nytimes do
    # scraping method
  end

  desc "scrape guardian"
  task :guardian do
    # scraping method
  end
end

desc "perform all scraping"
task scrape: ['scrape:nytimes', 'scrape:guardian']

名前空間も良い習慣です。

于 2016-06-02T13:58:17.397 に答える