2009-11-05 138 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身份獲得了拒絕權限的錯誤。