Ответ 1
chmod -R 777 PATH_TO_APP/uploads
chmod -R 777 PATH_TO_APP/tmp
Приложение отлично работает в разработке, но в производстве я получаю сообщение об ошибке Errno:: EACCES Permission Denied при попытке загрузить файл с помощью Carrierwave. Я уверен, что это имеет какое-то отношение к разрешениям. Как я могу установить разрешения для разрешения загрузки файлов?
pdf_uploader.rb
def store_dir
"#{Rails.root}/uploads/#{model.id}"
end
def cache_dir
"#{Rails.root}/tmp/uploads/cache/#{model.id}"
end
chmod -R 777 PATH_TO_APP/uploads
chmod -R 777 PATH_TO_APP/tmp
Ух, у меня была такая же проблема с сервером ubuntu. Загрузите файл с несущей, а затем попытайтесь прочитать его с помощью roo (жемчужина для файлов excel).
Errno::EACCES in IngestionController#upload
Permission denied
Разрешения были chmod-ed до 777 в этом каталоге, и файл создается нормально. Я считаю, что проблемы возникают при чтении пути к хранилищу.
excelx_file = params[:excel_file]
filex = MetadataUploader.new
filex.store!(excelx_file)
workbook = Excelx.new("#{filex.store_path}") <- This is the actual line throwing the error.
Хотя все работает нормально при выполнении того же приложения на моем mac.
Насколько я знаю, есть две вещи, которые могут быть здесь:
1) Каталог, в котором вы сохраняете свои изображения, не имеет прав на чтение и запись для других пользователей.
Чтобы исправить:
терминал
$ cd [my_app]
$ chmod -R 666 tmp
$ chmod -R 666 public/uploads
или если вы сохраняете свои изображения в частной папке:
$ chmod -R 666 private/uploads
Мы используем 666 по 777. 666 разрешает права на чтение и запись в каталог, а несущей - писать свои изображения. 777 позволяет читать, записывать привилегии и выполнять исполняемые файлы!. Другими словами, неприятная программа может быть загружена на ваш сервер, замаскированный под изображение, если вы используете 777. Несмотря на то, что расширение несущей полосы белого -list решает эту проблему, вы всегда должны использовать 666 по 777.
2) Вы не используете строки с двойными кавычками в методе store_dir
.
Чтобы исправить:
приложение/example_uploader.rb
class BaseUploader < CarrierWave::Uploader::Base
# other methods removed for brevity
def store_dir
"#{Rails.root}/private/" # works perfectly. Many thanks to @RGB
end
end
Просто хочу указать, насколько это тонкое. Вам нужны двойные кавычки и Rails.root
! Я делал это:
def store_dir
Rails.root + '/private' # raises Errno::EACCES error
end
и он вообще не работал. Настолько тонко. Община должна решить эту проблему.
Нам нужно предоставить разрешения для доступа к требуемому каталогу для пользователя root root
sudo chmod 777 -R your_project_directory_to_be_access
Из соображений безопасности просто держитесь в голове:
chmod 777
дает каждому возможность читать, писать и исполнять права, которые для большинства проблем являются слишком значительными.