2009-11-05 136 views
22

我目前有一个简单的模型定义,使用django thumbnails插件的photoupload功能。权限Django在上传文件时被拒绝错误

但是当我试图把它上传给了我以下错误:

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守护程序正在运行肯定有能够读取和写入该目录的用户。

从settings.py

MEDIA_ROOT = '/var/www/sites/gang/http/media/' 
MEDIA_ROOT_URL = '/media/' 

回答

8

尝试检查每个目录的权限路径开始/。只是一个想法。

+1

嗨,彼得,根目录的权限改变似乎有点不安全? – ismail 2009-11-06 06:41:10

+5

呃,我相信我说'检查',而不是'改变'......差别很大。我看到了以下情况:您的DOCROOT位于/ a/b/c/d。 'd'是777(通常是绝望),'a'和'b'是755(正常),但'c'是700(或相似),这几乎结束了派对。你继续玩'd',但这是'c'(或其他),这是问题。 – 2009-11-06 17:00:23

+1

谢谢,我想出了问题,但你的答案帮助! – ismail 2009-11-07 12:58:57

2
mkdir(name, mode) 

Exception Type: OSError at /admin/products/photo/add/ 

,但您的应用程序部署在

/var/www/django_projects/gangr/../gangr/ 

你有没有设定一个绝对路径的目录路径“/管理/产品/照片/添加/”,而不是相对的是“admin东西/产品/照片/添加/“?

检查settings.py文件中的MEDIA_ROOT和MEDIA_URL。

http://docs.djangoproject.com/en/dev/ref/settings/#media-root

+0

您好我的实际应用程序部署在: 在/ var/WWW/django_projects/gangr /产品/ 不知道为什么它说/.../gangr 然而,我有一个MEDIA_ROOT设置(指向使用的HTTP通过lightttpd ie'.../http/media'和MEDIA_ROOT_URL这是'/ media /' – ismail 2009-11-06 15:25:54

+0

我已经更新了这个问题,我的settings.py信息 – ismail 2009-11-06 15:35:25

59

我刚碰到同样的问题。如果您将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数据geekingreen/命令改变目录geekingreen和任何子目录具有组WWW的数据。
chmod -R g + w geekingreen/命令会更改组对现在属于www-data的所有这些文件夹具有的权限,现在具有写入权限。显然需要上传。

希望这可以帮助任何可能有类似问题的人。

+0

这对我来说已经足够干净了+1 – 2011-10-17 11:17:19

+0

好帖子! 。谢谢:) :) – Ron 2013-05-29 06:57:17

+0

@geekingreen是否有可能在开发服务器上做同样的事情? – nima 2014-04-18 20:56:17

1

以防万一您在运行开发服务器时遇到此问题。 我以这种方式以root身份运行了开发服务器:sudo python manage.py runserver 0.0.0.0:80,以便在同一LAN网络中使用iPad测试该站点。 该会话中生成的缓存文件属于root用户。所以当我第二天运行这个项目时,不是以root身份获得了拒绝权限的错误。