2017-10-11 99 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下載到臨時文件,這就是您需要設置擴展名的原因。 –

相關問題