【问题标题】:Getting Errno::ENOENT: No such file or directory @ rb_sysopen When trying to open remote file url in Roo gem(Ruby on rails)获取 Errno::ENOENT: No such file or directory @ rb_sysopen 尝试在 Roo gem 中打开远程文件 url(Ruby on rails)
【发布时间】:2017-10-11 03:22:39
【问题描述】:

尝试使用 roo gem 打开文件以导入数据时,我在 AWS s3 存储中存储了一个文件,它引发以下错误 Errno::ENOENT: No such file or directory @ rb_sysopen

def self.import(file, user_id)
        imported_file = ImportedFile.find(file)
        spreadsheet = Roo::Spreadsheet.open(open(imported_file.file_url), extension: :csv)
        spreadsheet = Roo::Spreadsheet.open(imported_file.file)
      header = spreadsheet.row(1)//raising error here
end

这个我也试过了

spreadsheet = Roo::Spreadsheet.open(imported_file.file_url)

在日志中出现以下错误

Errno::ENOENT: No such file or directory @ rb_sysopen - /uploads/imported_files/7a6f0463-b3cd-48f8-a579-bc27951242fe/13c96e3e-d3f3-4ed8-8d9a-b9ea03c0cc8c.csv

【问题讨论】:

  • 看起来不像一个完整的 URL
  • @neuhaus,我尝试使用完整的 url,后跟 https,header = spreadsheet.row(1),Errno::ENOENT: No such file or directory rb_sysopen - /uploads/imported_files/7a6f0463-b3cd- 48f8-a579-bc27951242fe/13c96e3e-d3f3-4ed8-8d9a-b9ea03c0cc8c.csv

标签: ruby-on-rails ruby rubygems roo-gem


【解决方案1】:

要打开 URL,您应该首先需要 open-uri 库:

require 'open-uri'

看例子:

open('http://example.com/')
# throws Errno::ENOENT: No such file or directory @ rb_sysopen - http://example.com/

require 'open-uri'
open('http://example.com/')
# opens the website

【讨论】:

  • 我接受你的回答,但它不适用于电子表格 = Roo::Spreadsheet.open(open(imported_file.file_url)),抛出 ArgumentError: Can't detect the type of /tmp/open -uri20171011-8816-ckswos - 请使用 :extension 选项声明其类型。但是在将扩展名与此电子表格一起传递后 = Roo::Spreadsheet.open(open(imported_file.file_url), extension: :csv) 它工作正常,但我认为这不是一个完美的解决方案
  • 我相信 Roo 正在尝试 - 可疑地 - 通过扩展名猜测文件类型,open-uri 将 URL 下载到临时文件,这就是您需要设置扩展名的原因。
【解决方案2】:

最后下面的代码对我有用。

spreadsheet = Roo::Spreadsheet.open(open(imported_file.file_url), extension: File.extname(imported_file.file_url).gsub('.','').to_sym) rescue nil

【讨论】:

  • 我不建议使用rescue nil 隐藏所有异常,因为它会掩盖很多问题。
  • 您需要open-uri吗?
  • @KARASZI István,不需要它就可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2020-11-09
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多