我目前有一个简单的模型定义,与photouload功能使用django thumbnails插件。
但是当我尝试上传时,它给了我以下错误:
OSError at /admin/products/photo/add/
(13, 'Permission denied')
现在,我知道这似乎是一个权限问题,所以我检查的第一件事是目录上的权限,并将这些更改为777(只是为了测试),重新启动服务器和fcgi,它仍然给出错误。
回溯
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守护进程的用户肯定有权读写该目录。
From settings.py
MEDIA_ROOT = '/var/www/sites/gang/http/media/'
MEDIA_ROOT_URL = '/media/'
5条答案
按热度按时间gfttwv5a1#
我刚刚遇到了同样的问题。如果你用Apache作为服务器,我找到了解决方案。例如,如果我的设置是:
媒体根目录= '/var/www/media/geekingreen'
那么我只需要递归地给予那个文件夹正确的权限,以确保任何子文件夹也有相同的权限. apache的默认组是www-data,所以要给我的django应用程序权限,我需要运行这些命令.
**chgrp -R www-data geekingreen/**命令可将目录geekingreen和任何子目录更改为组www-data。
**chmod -R g+w geekingreen/**命令将组对现在属于www-data的所有这些文件夹的权限更改为现在具有写权限。显然上传时需要。
希望这能帮助任何可能有过类似问题的人。
flvlnr442#
试着检查路径中从/开始的每个目录的权限。
rqmkfv5c3#
但您的应用程序部署在
您是否将目录路径设置为绝对路径“/admin/products/photo/add/”,而不是相对路径“admin/products/photo/add/"?
检查www.example.com文件中的媒体根目录和媒体URLsettings.py。
http://docs.djangoproject.com/en/dev/ref/settings/#media-root
lndjwyie4#
以防您在运行开发服务器时遇到这种情况。我以root用户身份运行开发服务器,如下所示:
sudo python manage.py runserver 0.0.0.0:80
,以便在同一个局域网中使用iPad测试站点。在该会话中生成该高速缓存文件属于root。因此,当我第二天以非root身份运行项目时,我得到了权限被拒绝的错误。x7yiwoj45#
您必须修改权限和所有者设置才能让应用上传媒体文件。您应该运行这些命令来授予Django应用权限,因为Apache的默认组是www-data。
通过这样做,将创建一个名为“www-data”的新用户组,并将用户“www-data”添加到其中,介质的用户组更改为“www-data”,最后所有者权限更改为“770”,授予所有者读取、写入和执行权限(root)和所有者组(www-data),但拒绝其他任何人访问。现在www-data是www-data组的成员,它具有读写能力。