【问题标题】:How to avoid permission denied with caching files in Django?如何避免在 Django 中缓存文件的权限被拒绝?
【发布时间】:2019-08-15 23:58:29
【问题描述】:

我不断从我的 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
    }
}
}

我不需要用户缓存文件吗?

【问题讨论】:

  • 您需要将所有权更改为您的 django 进程的进程用户。不是当前用户。你是用 uwsgi 来运行 django 还是别的什么?
  • 是的,我正在使用 wsgi。每次收到错误时我都会更改所有者
  • 如果您在 uwsgi 配置文件中设置了 uidgid 选项,则需要将所有权更改为这些值。 uid = 用户 ID 和 gid = 组 ID。

标签: django caching django-settings


【解决方案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/ 将分别创建。

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2016-06-15
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2019-07-12
    • 2015-03-13
    相关资源
    最近更新 更多