我正在尝试解析远程托管的csv文件。I用户rails 6和活动存储。该文件存储在ImportJob模型中。它的url可以这样访问:
ImportJob.last.csv_file.url
文件确实存在并且可以下载:http://res.cloudinary.com/dockcyr0z/raw/upload/rghn3zi2190nmc28qwbtr24apqxe.csv
但是当试图解析
时CSV.foreach(url, headers: true, header_converters: :symbol, col_sep: ';') do |row|
puts row
end
我得到Errno::ENOENT: No such file or directory @ rb_sysopen - http://res.cloudinary.com/dockcyr0z/raw/upload/rghn3zi2190nmc28qwbtr24apqxe.csv
同样的事情,如果我尝试先打开文件:open(url)
为什么我得到这个错误?如何解析远程csv文件?
用URI.parse
打开url
,将CSV.foreach
改为CSV.parse
CSV.parse(URI.parse(url).read, headers: true, header_converters: :symbol, col_sep: ';') do |row|
puts row
end
# output
{
:first_name => "Souper",
:last_name => "Man",
:email => "dageismar+learner233@gmail.com",
:role => "CEO",
:tags => "sales,marketing",
:avatar_url => "http://res.cloudinary.com/dockcyr0z/image/upload/x3f65o5mepbdhi4fwvww99gjqr7p"
}
{
:first_name => "Gentil",
:last_name => "Keum",
:email => "dageismar+learner234@gmail.com",
:role => "CEO",
:tags => "sales,marketing",
:avatar_url => "http://res.cloudinary.com/dockcyr0z/image/upload/x3f65o5mepbdhi4fwvww99gjqr7p"
}
:
或者就像Stefan建议的那样,用URI.open(url)
代替URI.parse(url).read