django - Errno 13 权限被拒绝 : media file in Django

标签 django apache ubuntu

我正在尝试将文件写入 django 媒体文件夹,但在执行时出现权限被拒绝错误。该配置在 OSX 开发平台上运行良好,但在 Ubuntu 测试服务器上却不行。
我有以下配置:
设置.py

    
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
    MEDIA_URL = '/media/'
    print('SETTINGS CWD = ', os.getcwd())
models.py 方法:
    def template_to_file(self):
        print('MODELS CWD = ', os.getcwd())
        with open(path + '/newsletter-volume-1.html', 'w') as static_file:
            static_file.write('Hello')
    
    def save(self, *args, **kwargs):
        self.template_to_file()
        super(Newsletter, self).save(*args, **kwargs)
在 OSX 开发平台上,文件写入媒体文件夹和当前工作目录打印如下:
设置 CWD =/Users/tb/Documents/dev/backoffice
模型 CWD =/Users/tb/Documents/dev/backoffice
但是,在 Ubuntu 平台上,我得到:
[Errno 13] 权限被拒绝:'/home/admin/backoffice/media/newsletter-volume-1.html'
设置 CWD =/home/admin/backoffice
型号 CWD =/
以下权限设置如下(admin是Django的所有者):
drwxrwxr-x 9 admin admin 4096 Jun 19 09:05 .
drwxr-xr-x 7 admin admin 4096 Jun 19 06:02 ..
drwxrwxr-x 2 admin admin 4096 Jun 19 06:07 media

admin@ubuntu:~/backoffice$ ps aux | grep django
admin      12606  0.4  6.6  82028 62280 ?        S    09:05   0:25 /home/admin/backoffice/venv/bin/python /home/admin/backoffice/venv/bin/celery -A backoffice beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
admin      18686  0.0  0.0   7692   684 pts/0    S+   10:35   0:00 grep --color=auto django
Apache 通过 WSGI 运行 Django
sudo ps aux | grep apache
[sudo] password for admin:
root       13921  0.0  0.5  14188  4924 ?        Ss   09:24   0:00 /usr/sbin/apache2 -k start
www-data   13922  0.1  6.6 407752 61752 ?        Sl   09:24   0:06 /usr/sbin/apache2 -k start
www-data   13923  0.0  1.2 2008496 12072 ?       Sl   09:24   0:00 /usr/sbin/apache2 -k start
www-data   13924  0.0  1.2 2008480 11844 ?       Sl   09:24   0:00 /usr/sbin/apache2 -k start
admin      20310  0.0  0.0   7692   684 pts/0    S+   10:58   0:00 grep --color=auto apache
我已经在 Ubuntu 测试服务器上的 shell 中尝试过这个,它工作正常。
有没有人对此有解决方案并解释为什么当前工作目录在 Ubuntu 服务器上更改为“/”?

最佳答案

权限被拒绝是公平的,因为您通过 root 创建文件并由 Apache 提供服务,只需使用 chown 将所有权授予“www-data”即可

关于django - Errno 13 权限被拒绝 : media file in Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68045514/

相关文章:

macos - Golang JSON 时间默认布局因平台而异?

python - Django 模型类和自定义属性

javascript - 即使将 STATICFILES_DIR 设置为正确的路径,Django 静态文件也不会加载

apache - 缩短 GWT/Tomcat 应用程序的 URL

php - (notice) child pid XXXX exit signal Segmentation fault (11), possible coredump in/etc/apache2

ubuntu - 安装 logstash 后 CPU 使用率 100%

mysql - 为 ruby​​ 安装 mysql gem

django - 使用 apache2 在 mod_wsgi 上运行 django python 3.4

python - 将 Django form.cleaned_data 存储在空模型字段中?

apache - 通过 puppet 启用 .htaccess 文件