2017-10-11 8 views
1

zu öffnen Ich habe eine Datei in AWS s3 Speicher beim Versuch, eine Datei zum Importieren von Daten mit zu öffnen roo Juwel, es erhöht folgende Fehler Errno::ENOENT: No such file or directory @ rb_sysopenGeting Errno :: ENOENT: Keine solche Datei oder Verzeichnis @ rb_sysopen Beim Versuch, Remote-Datei-URL in Roo Gem (Ruby auf Schienen)

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 

ich dies sogar auch versucht

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

in log unten Fehler beim Abruf

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

Sieht nicht wie eine vollständige URL – neuhaus

+0

@neuhaus ich mit voller url versuchte durch https gefolgt, header = spreadsheet.row (1), Errno :: ENOENT: Keine solche Datei oder das Verzeichnis rb_sysopen -/uploads /imported_files/7a6f0463-b3cd-48f8-a579-bc27951242fe/13c96e3e-d3f3-4ed8-8d9a-b9ea03c0cc8c.csv –

Antwort

2

Schließlich folgende Code wird für mich gearbeitet.

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

Ich empfehle nicht, alle Ausnahmen mit 'rescue nil' zu verstecken, da es viele Probleme überschatten kann. –

+0

Mussten Sie die 'open-uri' benötigen? –

+0

@KARASZI István, nicht erforderlich ohne erfordern es funktionierte –

0

URLs zu öffnen, sollten Sie die open-uri Bibliothek benötigen zuerst:

require 'open-uri' 

Siehe Beispiel:

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

Ich akzeptiere Ihre Antwort, aber es funktioniert nicht mit der Tabelle = Roo :: Spreadsheet.open (open (importierte_Datei.file_url)), werfen ArgumentError: Kann den Typ von/tmp/open-uri20171011-8816-ckswos nicht erkennen - bitte verwenden Sie die Option: extension, um ihren Typ zu deklarieren. aber nach Verlängerung mit dieser Tabelle = Roo :: Spreadsheet.open (open (imported_file.file_url), Erweiterung:: csv) ging es gut, aber ich denke, es ist keine perfekte Lösung –

+0

Ich glaube, Roo versucht zu - fraglich - errate den Dateityp durch die Erweiterung und 'open-uri' lädt die URL in eine temporäre Datei, das ist der Grund, warum du die Erweiterung einstellen musst. –

Verwandte Themen