如何运行所有rake任务?

刚刚安装gemhttps://github.com/javan/whenever运行我的rake任务,这是nokogiri / feedzilla依赖的抓取任务。

例如我的任务叫做grab_bbc,grab_guardian等

我的问题 – 当我更新我的网站时,我会不断向scheduler.rake添加更多任务。

我应该在config / schedule.rb中编写什么来使所有rake任务运行,无论它们被称为什么?

这样的东西会起作用吗?

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

使用RoR 4是Cron的新手。

 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

为每个抓取任务编写单独的rake任务。 然后编写一个聚合任务来运行所有那些抓取rake任务。

 desc "scrape nytimes" task :scrape_nytimes do # scraping method end desc "scrape guardian" task :scrape_guardian do # scraping method end desc "perform all scraping" task :scrape do Rake::Task[:scrape_nytimes].execute Rake::Task[:scrape_guardian].execute end 

然后将rake任务调用为

 rake scrape 

确保您拥有一个包含所有任务的唯一命名空间,例如:

 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或主任务对我来说似乎是一个更好的选择。

聚合任务可以简洁:

 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'] 

命名空间也是一种很好的做法。