Ответ 1
Попробуйте проверить разрешения для каждой директории в пути, начинающемся с /. Просто мысль.
В настоящее время у меня есть простая модель с функцией photoupload с использованием django thumbnails.
но когда я пытаюсь загрузить его, возникает следующая ошибка:
OSError at /admin/products/photo/add/
(13, 'Permission denied')
Теперь я знаю, что это проблема с разрешением, поэтому первое, что я проверил, это права на каталог и изменили их на 777 (Just to Test), перезапустили сервер и fcgi, и он все еще дает ошибку.
Traceback
Traceback: File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args,
**callback_kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in wrapper
226. return self.admin_site.admin_view(view)(*args,
**kwargs) File "/usr/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
186. return view(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/db/transaction.py" in _commit_on_success
240. res = func(*args, **kw) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in add_view
734. self.save_model(request, new_object, form, change=False) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in save_model
557. obj.save() File "/usr/lib/python2.6/dist-packages/django/db/models/base.py" in save
410. self.save_base(force_insert=force_insert, force_update=force_update) File "/usr/lib/python2.6/dist-packages/django/db/models/base.py" in save_base
483. values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields if not isinstance(f, AutoField)] File "/usr/lib/python2.6/dist-packages/django/db/models/fields/files.py" in pre_save
252. file.save(file.name, file, save=False) File "/var/www/django_projects/gang/../gang/products/thumbs.py" in save
84. super(ImageWithThumbsFieldFile, self).save(name, content, save) File "/usr/lib/python2.6/dist-packages/django/db/models/fields/files.py" in save
91. self.name = self.storage.save(name, content) File "/usr/lib/python2.6/dist-packages/django/core/files/storage.py" in save
47. name = self._save(name, content) File "/usr/lib/python2.6/dist-packages/django/core/files/storage.py" in _save
146. os.makedirs(directory) File "/usr/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
157. mkdir(name, mode)
Exception Type: OSError at /admin/products/photo/add/ Exception Value: (13, 'Permission denied')
Пользователь, которому запущен демон FCGI, определенно имеет доступ к чтению и записи в этот каталог.
Из settings.py
MEDIA_ROOT = '/var/www/sites/gang/http/media/'
MEDIA_ROOT_URL = '/media/'
Попробуйте проверить разрешения для каждой директории в пути, начинающемся с /. Просто мысль.
Я столкнулся с этой проблемой. И нашел решение, если вы размещаете Apache в качестве своего сервера. Например, если мои настройки были:
MEDIA_ROOT = '/var/www/media/geekingreen'
тогда мне просто нужно было бы предоставить этой папке правильные разрешения рекурсивно, чтобы убедиться, что все подпапки также имеют одинаковое разрешение. Группа по умолчанию для apache - это www-data, поэтому для разрешения моего приложения django я буду запускать эти команды.
cd /var/www/media
chgrp -R www-data geekingreen/
chmod -R g+w geekingreen/
Команда chgrp -R www-data geekingreen/ изменяет каталог geekingreen и любые подкаталоги, чтобы иметь WWW-данные группы.
Команда chmod -R g + w geekingreen/ изменяет права, которые группа имеет во всех этих папках, которые теперь принадлежат к www-данным, теперь имеют разрешение на запись. Очевидно, требуется для загрузки.
Надеюсь, это может помочь любому, у кого могла быть аналогичная проблема.
mkdir(name, mode)
Exception Type: OSError at /admin/products/photo/add/
но ваше приложение развернуто на
/var/www/django_projects/gangr/../gangr/
У вас есть путь к каталогу, установленный в абсолютный путь "/admin/products/photo/add/", а не что-то вроде "admin/products/photo/add/"?
Проверьте MEDIA_ROOT и MEDIA_URL в файле settings.py.
http://docs.djangoproject.com/en/dev/ref/settings/#media-root
На всякий случай вы столкнетесь с этим при запуске своего сервера разработки.
Я запустил сервер разработки как root: sudo python manage.py runserver 0.0.0.0:80
, чтобы протестировать сайт с iPad в той же сети LAN.
Файлы кеша, созданные в этом сеансе, принадлежали root. Поэтому, когда я запускал проект на следующий день НЕ как root, я получил разрешение на отклонение ошибки.