刚刚安装gem https://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
对Cron来说是新手,使用RoR 4.
答案 0 :(得分:7)
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
答案 1 :(得分:4)
为每个抓取任务编写单独的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
答案 2 :(得分:2)
确保您拥有一个包含所有任务的唯一命名空间,例如:
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
或主任务对我来说似乎是更好的选择。
答案 3 :(得分:1)
namespace
和 in_namespace
动态运行所有任务。我更喜欢这种方法,因为它可以使事情保持干净,并且如果我们的任何命名空间任务发生变化,您就不必记住更新您的“父”任务。
注意,这个例子是从Dmitry Shvetsov's excellent answer借来的。
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 do
Rake.application.in_namespace( :scrape ){ |namespace| namespace.tasks.each( &:invoke ) }
end
答案 4 :(得分:0)
汇总任务可以简明扼要:
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']
命名空间也是一种很好的做法。