2016-07-19 3 views
0

У меня есть корень Django приложения на /var/project и модель, определенную как это:Django зачем поднимать разрешение при сохранении FileField?

class Notice(models.Model): 
    title = models.CharField('title', max_length=80, default='', blank=True) 
    info = models.FileField("info", null=True, upload_to='app/files') 

class NoticeForm(forms.ModelForm): 

    class Meta: 
     model = models.Notice 
     fields = ('title', 'info') 

При сохранении info полея, это всегда поднимает ошибку как:

Internal Server Error: /app/notice/update/9 

PermissionError at /app/notice/update/9 
[Errno 13] Permission denied: '/var/project/media/app/files/bm.py' 

Я думаю, что настройки разрешения являются Годятся потому что:

а) я запустить приложение Django через uwsgi с помощью www-data пользователей, как это:

[uwsgi] 
    uid = www-data 
    gid = www-data 
    chmod-socket = 666 
    chown-socket = www-data:www-data 

б) папка СМИ:

(www)[email protected]:/var/project/media/app# ls -l 
total 40 
drwxr-xr-x 2 www-data www-data 36864 Jul 19 20:03 avatar 
drw-rw-rw- 2 www-data www-data 4096 Jul 19 15:06 files 

с) Nginx статической конф:

location /media { 
    alias /var/project/media; 
} 
location /static { 
    alias /var/project/static; 
} 

d) У меня есть другая модель, у которой есть поле tx = models.ImageField("tx",blank=True, null=True,upload_to='app/avatar') и все re OK при сохранении этого поля.

Эта проблема беспокоит меня целый день. Какая проблема?

ответ

0

Я пробовал this solution, и проблема решена. Я не знаю почему, но это просто работает.

chgrp -R www-data /var/project 
chmod -R g+w /var/project 
usermod -a -G www-data root 
find /var/project -type d -exec chmod 2775 {} \; 
find /var/project -type f -exec chmod ug+rw {} \; 
Смежные вопросы