2017-10-11 16 views
1

当试图打开文件以导入数据时,我在AWS s3存储中存储了一个文件Errno::ENOENT: No such file or directory @ rb_sysopen获取Errno :: ENOENT:没有这样的文件或目录@ rb_sysopen当试图在Roo gem(Ruby on rails)中打开远程文件url时

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 
+0

看起来不像一个完整的URL – neuhaus

+0

@neuhaus,我试着用完整的URL,然后HTTPS,标题= spreadsheet.row(1),则errno :: ENOENT:没有这样的文件或目录rb_sysopen - /上传/imported_files/7a6f0463-b3cd-48f8-a579-bc27951242fe/13c96e3e-d3f3-4ed8-8d9a-b9ea03c0cc8c.csv –

回答

2

最后下面的代码是为我工作。

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

我不建议用'rescue nil'隐藏所有的异常,因为它可能会影响很多问题。 –

+0

您是否需要“open-uri”? –

+0

@KARASZIIstván,没有要求没有要求它工作 –

0

要打开的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 
+0

我接受你的答案,但它不适用于电子表格= Roo :: Spreadsheet.open(open(imported_file.file_url )),抛出ArgumentError:无法检测/ tmp/open-uri20171011-8816-ckswos的类型 - 请使用:extension选项声明其类型。但通过扩展与此电子表格= Roo :: Spreadsheet.open(打开(imported_file.file_url),扩展名::csv)后,它工作正常,但我认为这不是一个完美的解决方案 –

+0

我相信Roo正试图 - 可疑的是 - 通过扩展名猜测文件类型,“open-uri”将URL下载到临时文件,这就是您需要设置扩展名的原因。 –

相关问题