ubuntu Errno 13许可被拒绝:Django中的媒体文件

vnzz0bqm  于 2023-04-29  发布在  Go
关注(0)|答案(2)|浏览(139)

我尝试将文件写入django媒体文件夹,但在执行时,我得到一个权限拒绝错误。配置在OSX开发平台上工作正常,但在Ubuntu测试服务器上就不行了。
我有以下配置:

settings.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开发平台上,文件写入介质文件夹和当前工作目录打印如下:
SETTINGS CWD = /Users/tb/Documents/dev/backoffice
模型CWD = /Users/tb/Documents/dev/backoffice
但是,在Ubuntu平台上,我得到:
[Errno 13] Permission denied:'/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服务器上的当前工作目录更改为'/'?

iszxjhcz

iszxjhcz1#

权限被拒绝是公平的,因为你创建的文件由root和服务的Apache,只是给予所有权'www-data'使用chown,它会工作

xam8gpfp

xam8gpfp2#

当尝试写入的文件已打开时,会发生此错误。为了避免这个错误,在你写文件之前,先创建一个代码来关闭它。

相关问题