Rails 3. immer Errno::EACCES Permission Denied beim hochladen von Dateien auf die Produktion
Die app funktioniert gut, in der Entwicklung, aber in der Produktion erhalte ich Errno::EACCES-Permission Denied-Fehler wenn ich versuche eine Datei hochzuladen, mit Carrierwave. Ich bin sicher, es hat etwas zu tun mit Berechtigungen. Wie kann ich die Berechtigungen zu ermöglichen, Datei-uploads?
pdf_uploader.rb
def store_dir
"#{Rails.root}/uploads/#{model.id}"
end
def cache_dir
"#{Rails.root}/tmp/uploads/cache/#{model.id}"
end
ist dies heroku oder einen anderen Dienst?
es ist eine app mit ActiveAdmin. Es nutzt CarrierWave für Datei-uploads. Ich benutze Apache und Passenger.
Ich war immer
es ist eine app mit ActiveAdmin. Es nutzt CarrierWave für Datei-uploads. Ich benutze Apache und Passenger.
Ich war immer
Errno::EACCESS
auf /uploads
.. mein fix war, fügen #{Rails.root}/public/
zu den store_dir
Methode. 🙂 Hoffe, das hilft jemand!InformationsquelleAutor leonel | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist normal, um solche Verzeichnisse schreibbar für andere Benutzer.
Es ist gefährlich, weil damit alle Benutzer auch unbekannte machte alles, so dass die wirkliche Lösung ist das ändern der Benutzer und Gruppen von Ihrem app-Ordner auf apache-Benutzer und die Gruppe, in den meisten Fällen ist www-data.
Ich würde verwenden
666
über777
. Nie, nie, nie verwenden777
und Sie sollten in Ordnung sein.Es ist nicht normal, dies zu tun. Du bist Einstellung jede Datei als ausführbar, lesbar und schreibbar von jedem.
InformationsquelleAutor alexkv
Soweit ich weiß, gibt es zwei Dinge, die hier Los:
1) Das Verzeichnis, Sie speichern Ihre Bilder nicht Lesen/schreiben-Zugriffsrechte für andere Benutzer.
Beheben:
terminal
oder wenn Sie speichern Sie Ihre Bilder in ein eigenes Verzeichnis:
Sind wir mit 666 über 777. 666 ermöglicht lese-und Schreibzugriff auf ein Verzeichnis, und carrierwave schreiben muss seine Bilder. 777 erlaubt Lesen, schreiben und Privilegien für ausführbaren Dateien ausgeführt werden! In anderen Worten, eine böse Programm kann hochgeladen werden, um Ihre server, getarnt als ein Bild, wenn Sie mit den 777. Obwohl carrierwave Erweiterung "weißen Liste" löst dieses problem, sollten Sie immer 666 über 777.
2) Sie sind nicht mit double quoted strings in der
store_dir
Methode.Beheben:
app/example_uploader.rb
Möchte nur darauf hinweisen, wie subtil das ist. Sie müssen double quoted strings und
Rails.root
! Ich war, dies zu tun:war und es nicht funktioniert. So subtil. Die Gemeinschaft sollte diese Adresse.
InformationsquelleAutor Starkers
Uhm ich habe das gleiche Problem mit einem ubuntu-server. Das hochladen einer Datei mit carrierwave und dann zu versuchen, es zu Lesen mit roo (ein Juwel für excel-Dateien).
Berechtigungen chmod-ed 777 auf das Verzeichnis und die Datei, die angelegt wird, ok. Ich glaube, die Probleme beim Einlesen der Speicher-Pfad.
Obwohl alles funktioniert ok, wenn Sie ausführt, die gleiche app auf meinem mac.
InformationsquelleAutor Hiromichan
Wir brauchen, um zu gewähren, Berechtigungen für den Zugriff auf das gewünschte Verzeichnis für die system-root-Benutzer
Aus Gründen der Sicherheit, nur halten Sie in Ihrem Geist:
chmod 777
gibt jedem lese -, schreib-und execute-Rechte, die für die meisten Probleme ist definitiv zu viel.InformationsquelleAutor Jai Kumar Rajput