0

我有一个用 Nokogiri 创建的哈希,我正在尝试从中生成一个 JSON 文件。我发现

tempHash = {
  "key_a" => "val_a",
  "key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
  f.write(tempHash.to_json)
end

问题是我不断收到错误

 test.rb:43:in `initialize': No such file or directory - public/temp.json (Errno::ENOENT)

我的代码看起来像

def summary
  listing_data = @nodes
  listings = listing_data.css('div.unsponsored div.item.compact.listing') 

  listing_hashes = listings.map do |x| 
    type = "#{@type}"
    address = x.css('div.body h3 a').text
    unit = x.css('div.body h3 a').text.gsub!(/.*?(?=#)/im, "")
    url = x.css('div.item_inner div.body h3 a').text
    price = x.css('h3 span').text 

    {
      :type => type,
      :address => address,
      :unit => unit,
      :url => url,
      :price => price,
    }
  end

  File.open("public/temp.json","w") do |f|
    f.write(JSON.pretty_generate(listing_hashes))
  end
end

谢谢!

4

2 回答 2

1

您可能没有创建文件夹。File.open如果文件不存在,该选项w将创建一个文件,但它不能创建丢失的目录。

如果无法手动创建,可以使用此代码创建文件夹

Dir.mkdir('public') unless File.exists?('public')
File.open("public/temp.json","w") do |f|
 f.write(JSON.pretty_generate(listing_hashes))
end
于 2013-04-23T03:34:08.170 回答
0

该错误是不言自明的:"No such file or directory - public/temp.json"

在这种情况下,它可能是不存在的目录,因为您指定'w'了 mode 参数。如果文件不存在,指定'w'将创建文件,但不会创建目录。

尝试public自己创建目录,然后再次运行您的代码。

于 2013-04-23T03:30:19.093 回答