web-scraping - kimurai gem - 适用于开发,而不是生产 - 错误:参数数量错误(给定 2,预期 1;必需关键字:url)
问题描述
该代码在我的本地计算机(开发)上运行良好,但在生产中,当我尝试运行 de scrape 方法时,它会引发错误:错误:参数数量错误(给定 2,预期 1;所需关键字:url)。KimuraiGem 生产时有什么特殊配置吗?使用 rbenv Ruby -v 3.0.1 Rails -v 6.1.4.1 Unicorn 和 nginx
致命 -- milenios_spider: Spider: 停止: {:spider_name=>"milenios_spider", :status=>:failed, :error=>"#<ArgumentError: 参数数量错误(给定 2,预期 1;必需关键字:url) >", :environment=>"开发", :start_time=>23:14:29.30478516 +0000, :stop_time=>2021-10-31 23:14:33.352345259 +0000, :running_time=>" 4s", :visits=>{:requests=>1, :responses=>1}, :items=>{:sent=>0, :processed=>0}, :events=>{:requests_errors=>{} , :drop_items_errors=>{}, :custom=>{}}}
在我的控制器中:
def scrape
url = "https://www..some page...com"
response = MileniosSpider.process(url)
if response[:status] == :completed && response[:error].nil?
flash.now[:notice] = "Successfully scraped url"
else
flash.now[:alert] = response[:error]
end
rescue StandardError => e
flash.now[:alert] = "Error: #{e}"
end
模型:
class MileniosSpider < Kimurai::Base
@name = 'milenios_spider'
@engine = :mechanize
@config = {
restart_if: { memory_limit: 350_000 },
before_request: { delay: 1..2 }
}
def self.process(url)
@start_urls = [url]
self.crawl!
end
def parse(response, url:, data: {})
.........some code .....
end
end
解决方案
您在开发中使用什么版本的 ruby?我认为 Kimurai 还不支持 Ruby 3.x,这是您在生产中使用的。您可以降级项目的 Ruby 版本或尝试通过命令行使用不同版本的 Ruby 运行 Kimurai。