2017-08-07 4 views
0

In einer Rails-Anwendung, wenn ich vor Ort arbeite, ich einen Ordner lesen kann, mit einem eigenen Unterordner und Dateien. in Heroku funktioniert nicht. irgendeine Hilfe?Schienen DuFormal arbeitet lokal, nicht auf Heroku

def upload_multifiles 
dir = params[:path] 

files_directories = Dir["#{dir}/**/*"] 
files = [] 

files_directories.each do |file_directory| 
    if file_directory.include? ".pdf" 
    files << file_directory 
    end 
end 

Ende

die Fehler, die ich bekommen ist:

2017-08-07T08:23:06.984190+00:00 app[web.1]: I, [2017-08-07T08:23:06.984142 #4] INFO -- : [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.6ms) 
2017-08-07T08:23:06.983899+00:00 app[web.1]: found_dir 
2017-08-07T08:23:06.984787+00:00 app[web.1]: F, [2017-08-07T08:23:06.984747 #4] FATAL -- : [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] app/controllers/multiuploader_controller.rb:14:in `open' 
2017-08-07T08:23:06.984642+00:00 app[web.1]: F, [2017-08-07T08:23:06.984593 #4] FATAL -- : [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] 
2017-08-07T08:23:06.984756+00:00 app[web.1]: F, [2017-08-07T08:23:06.984698 #4] FATAL -- : [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] 
2017-08-07T08:23:06.984697+00:00 app[web.1]: F, [2017-08-07T08:23:06.984647 #4] FATAL -- : [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] Errno::ENOENT (No such file or directory @ dir_initialize - /Users/xxxxx/yyyyy/ttttt/zzzzzz): 
2017-08-07T08:23:06.984788+00:00 app[web.1]: [d25c9aa4-70c2-44c1-a44e-6c0a19a92fd8] app/controllers/multiuploader_controller.rb:14:in `upload_multifiles' 

Vielen Dank im Voraus

Albert

Antwort

0

Sie können das Dateisystem auf Heroku verwenden wie Sie können auf Ihrer lolcal Maschine tun. Sie müssen etwas wie S3 verwenden, wenn Sie Dateien (von Uploads) speichern möchten. können Sie hier mehr darüber lesen: How to use heroku's ephemeral filesystem

Wenn Sie nur Dateien lesen, die Sie mit Ihrer Anwendung geliefert haben: den Pfad /Users/xxxx ist ein OS X-Verzeichnisstruktur, die auf Heroku existiert nicht . Sie könnten Rails.root verwenden, um Pfade zu erstellen, die in allen Umgebungen funktionieren.

Darüber hinaus: Auflistung von Dateien aus einem Pfad durch Parameter geliefert klingt wie ein riesiges Sicherheitsrisiko für mich. Du solltest das nicht tun.

auch: es gibt eine elegantere Art und Weise ein gefiltertes Array, zum Beispiel zu erstellen:

files = ['a.pdf', 'b.pdf', 'c.txt'] 
pdfs = files.select { |file| file.ends_with?('.pdf') } 
+0

vielen Dank für Ihre Antwort. Das Problem mit S3 wäre das gleiche. Ich möchte die Dateien nicht manuell hochladen. Ich wollte ein Skript schreiben und mache es mit Code. – AlbertMunichMar

Verwandte Themen