Ruby on rails 用铁轨刮削的耙子任务
我开始编写scraper来从不同的网站获取数据。我在一个rake文件中构建了第一个scraper,现在开始编写第二个rake文件以从第二个站点获取数据。现在,我正在为我感兴趣的每个站点编写一个特定的刮板(而不是尝试构建一个通用刮板) 我有3个问题:Ruby on rails 用铁轨刮削的耙子任务,ruby-on-rails,rspec,screen-scraping,rake,Ruby On Rails,Rspec,Screen Scraping,Rake,我开始编写scraper来从不同的网站获取数据。我在一个rake文件中构建了第一个scraper,现在开始编写第二个rake文件以从第二个站点获取数据。现在,我正在为我感兴趣的每个站点编写一个特定的刮板(而不是尝试构建一个通用刮板) 我有3个问题: 写rake任务对我来说是个不错的选择吗?有没有其他选择我应该考虑? 如何将函数/方法添加到rake文件?(很抱歉,这些问题很愚蠢,但我不知道如何构造我的代码……所以现在在一个长方法中只有500行不间断的代码)例如,我想要一个“get_descript
作为一般原则,rake任务应该非常少。将实际行为引用到实际类。这些类可以很容易地进行测试 例如:
task :scrape do
Scraper.scrape!
end
class Scraper
def self.scrape!
# do something
end
end
describe Scraper do
# your tests
end
正如@brad所指出的,您可以使用thor,它本身就有一个规则的类结构,因此理论上应该更容易测试任务本身。不过我还没那么做
您可以在rake中定义方法,但我不知道它们最终会出现在哪里。你不应该那样做,所以不用麻烦了。尽量减少任务主体,编写普通代码来完成脏活。太好了,这很有帮助!看来这是我应该走的路线。。。只有一个问题:我想避免我的Rails应用程序的“models”文件夹中有我的特定于刮板的模型。我如何才能为特定于Scraper的模型(Scraper.rb用于通用功能,site1.rb用于特定于site1的功能等)创建一个文件夹,并让我的rake任务“查看”它?创建类似于
app/Scraper/site1.rb的内容。如果您使用的是Rails 3,您可以在应用程序中添加任何将自动(延迟)加载的目录。为任务加载环境:task:site_1=>:environment do
。如果您不想加载整个rails环境,那么需要手动加载这些文件。太好了!我还在2.3.8上。。。因此,我必须通过添加**config.load\u路径来加载文件夹