Как избежать отказа в разрешении при кэшировании файлов в Django?

#django #caching #django-settings

#django #кэширование #django-настройки

Вопрос:

Я продолжаю получать эту проблему с моего веб-сайта django, каждый раз, когда мне приходится переходить по пути, чтобы удалить root-доступ для всех файлов и предоставить доступ текущему пользователю с помощью chown user_name:user_group * , и это работает. Но после того, как веб-сайт генерирует несколько новых кэшированных файлов, проблема возвращается.

 Internal Server Error: /

PermissionError at /
[Errno 13] Permission denied:'/var/tmp/project_cache/a92ccb8f0f5dc3d17dbaae74ac7.djcache'
  

Я использую кэш django на основе файлов. Вот мои настройки

 CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/project_cache',
    'TIMEOUT': 60 * 15,
    'OPTIONS': {
        'MAX_ENTRIES': 1000
    }
}
}
  

Нужно ли мне никогда не использовать пользовательский кэш с файлами?

Комментарии:

1. Вам необходимо сменить владельца на пользователя процесса вашего процесса django. Не текущий пользователь. Вы используете uwsgi для запуска django или что-то еще?

2. Да, я использую wsgi. Я меняю владельца каждый раз, когда получаю ошибку

3. Если вы установили параметр uid и gid в своем файле конфигурации uwsgi, вам необходимо изменить право собственности на эти значения. uid = идентификатор пользователя и gid = идентификатор группы.

Ответ №1:

/tmp/ и /var/tmp/ доступны для записи всеми пользователями.

Я прошу Django создать папку для каждого отдельного пользователя, чтобы меня не беспокоили [Errno 13] Permission denied .

 import os
from pwd import getpwuid

__USERNAME = getpwuid(os.getuid()).pw_name

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': f'/tmp/{__USERNAME}-django/',
    },
}
  

Например, /tmp/ubuntu-django/ и /tmp/www-data-django/ будут созданы соответственно.