我尝试将文件写入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服务器上的当前工作目录更改为'/'?
2条答案
按热度按时间iszxjhcz1#
权限被拒绝是公平的,因为你创建的文件由root和服务的Apache,只是给予所有权'www-data'使用chown,它会工作
xam8gpfp2#
当尝试写入的文件已打开时,会发生此错误。为了避免这个错误,在你写文件之前,先创建一个代码来关闭它。