Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django manage.py脚本搞乱了目录权限_Python_Django_File Permissions - Fatal编程技术网

Python django manage.py脚本搞乱了目录权限

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

我有一个脚本,可以检查json文件并将照片下载到文件夹中

此位检查目录是否存在,如果不存在,则创建目录:

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

  • 以Web服务器用户身份运行manage.py

    $sudo-u www.data./manage.py


  • 注意:如果未设置,则应设置它。

    要取消对第一期的工具设置:

  • 创建了一些带有错误的烫发的数据

    $sudo chown-R www-data:www-data/full/path/to/media

  • 以Web服务器用户身份运行manage.py

    $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服务器。。?