You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Feedjira解析多个URL触发ArgumentError问题求助

解决Feedjira.fetch_and_parse传入多个URL触发的ArgumentError问题

首先要明确:你遇到的问题是Feedjira版本迭代的功能变更导致的。从2.0版本开始,Feedjira就计划移除内置的并发解析支持,改为仅接受单个URL参数,多URL的并发逻辑需要由应用层自己实现(比如通过Worker或者线程处理)。你当前使用的是2.1.4版本,正好属于这个范围,所以传入数组会触发Faraday的URI解析错误——因为它期望的是单个URI字符串/对象,而不是数组。

快速解决方案:手动遍历URL逐个解析

既然gem不再处理多URL并发,你可以自己遍历URL数组,逐个调用fetch_and_parse:

feed_urls = ["https://jobs.startupnorth.ca/jobs.rss", "https://jobs.startupnorth.ca/jobs.rss"]
feeds = feed_urls.map do |url|
  Feedjira::Feed.fetch_and_parse(url)
end

实现并发解析(应用层处理)

如果需要提升效率,你可以用Ruby的线程或者第三方并发库来实现批量请求,比如用concurrent-ruby gem:

# 先添加gem到Gemfile:gem 'concurrent-ruby'
require 'concurrent'

feed_urls = ["https://jobs.startupnorth.ca/jobs.rss", "https://jobs.startupnorth.ca/jobs.rss"]
feeds = Concurrent::Array.new # 线程安全的数组

# 用线程池控制并发数,避免请求过多
Concurrent::ThreadPoolExecutor.new(max_threads: 5).tap do |executor|
  feed_urls.each do |url|
    executor.post do
      feeds << Feedjira::Feed.fetch_and_parse(url)
    end
  end
  executor.shutdown
  executor.wait_for_termination # 等待所有请求完成
end

关于文档的说明

你提到的官方文档显示fetch_and_parse支持多URL,这应该是针对Feedjira 1.x版本的旧文档,没有及时更新到2.x的变更内容。使用时一定要注意版本对应。

降级到旧版本(不推荐)

如果一定要用gem原生的多URL支持,你可以降级到1.x版本,但不建议这么做——旧版本可能存在安全漏洞,也不会再接收新功能更新和bug修复。


内容的提问来源于stack exchange,提问作者VegaStudios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:36