Python django manage.py脚本搞乱了目录权限
我有一个脚本,可以检查json文件并将照片下载到文件夹中 此位检查目录是否存在,如果不存在,则创建目录:Python django manage.py脚本搞乱了目录权限,python,django,file-permissions,Python,Django,File Permissions,我有一个脚本,可以检查json文件并将照片下载到文件夹中 此位检查目录是否存在,如果不存在,则创建目录: folder = media_root + 'photos/' + now.strftime('%Y') + '/' + now.strftime('%m') + '/' + now.strftime('%d') if not os.path.isdir(folder): os.makedirs(folder) 一切正常,但现在无法通过django管理界面写入文件夹,导致错误OS
folder = media_root + 'photos/' + now.strftime('%Y') + '/' + now.strftime('%m') + '/' + now.strftime('%d')
if not os.path.isdir(folder):
os.makedirs(folder)
一切正常,但现在无法通过django管理界面写入文件夹,导致错误OSError:[Errno 13]权限被拒绝:media/photos/2014/08/31/OneOf.jpg
唯一可行的方法是我将权限设置为每个人都可以写。
我检查了一下,gunicorn正在运行,用户无人,这以前从未引起过问题
是什么导致了这个问题?我如何阻止它在未来发生
编辑:
我尝试了下面的建议,但以无人身份运行脚本只返回了一个错误:
File "./manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
文件“/manage.py”,第8行,在
从django.core.management导入从命令行执行
ImportError:没有名为django.core.management的模块
我还检查了django管理界面创建的其他文件夹,它们也归root所有
决议:
makedirs命令将整个目录树更改为root所有,这就是为什么即使拥有与其他文件夹相同的权限,django也无法写入该目录
为了防止再次发生这种情况,解决方案是在创建新文件夹后恢复对该目录树的所有权。问题是您正在以root用户身份运行脚本 运行程序的用户与拥有该程序创建的任何文件的用户相同 一旦以root用户身份运行程序,任何输出都将归root用户所有,这意味着运行django应用程序的用户将无权访问这些文件
您应该以运行web应用程序的同一用户(
nobody
)的身份运行manage.py
脚本,这样创建的文件就可以被gunicorn
进程以及扩展名django读取 问题是您正在以root用户身份运行脚本
运行程序的用户与拥有该程序创建的任何文件的用户相同
一旦以root用户身份运行程序,任何输出都将归root用户所有,这意味着运行django应用程序的用户将无权访问这些文件
您应该以运行web应用程序的同一用户(
nobody
)的身份运行manage.py
脚本,这样创建的文件就可以被gunicorn
进程以及扩展名django读取 要取消您的第一期杂志:
$sudo chown-R www-data:www-data/full/path/to/media
$sudo-u www.data./manage.py
注意:如果未设置,则应设置它。要取消对第一期的工具设置:
$sudo chown-R www-data:www-data/full/path/to/media
$sudo-u www.data./manage.py
注意:如果没有设置,您应该设置它。这个脚本,它以什么用户的身份运行?@BurhanKhalid我是以root用户身份登录ubuntu服务器的。您是以root用户的身份运行脚本吗?(
manage.py
script)。@BurhanKhalid是的,但没有sudo命令。您使用哪个web服务器运行django…?这个脚本,它是以什么用户的身份运行的?@BurhanKhalid我以root用户身份登录到ubuntu服务器。您是否以root用户的身份运行该脚本?(manage.py
脚本)。@BurhanKhalid是的,但没有sudo命令。运行django的是哪台web服务器。。?