使用django搞一个东西玩,python manager.py runserver的时候,一切正常。将项目部署到apache之后,出现了问题。
定位到问题所在:
if not os.path.isdir(working_dir):
return
为什么apache里面认为这个目录不存在了呢,查看isdir的定义:
os.path.isdir(path)
Return True if path is an existing directory. This follows symbolic links, so both islink() and isdir() can be true for the same path.
并没有什么特别的。
经过分析,怀疑是权限问题导致的,python manager.py runserver的时候,是以我的用户名启动的;部署到apache的时候,是以www-data用户名启动的。修改apache.conf中的启动用户名和用户组之后,sudo /etc/init.d/apache restart后,可以使用了。当然也可以把working_dir以及上层目录的权限设置一下。
问题复现:
先建立测试用的目录结构
sudo mkdir /tmp/test
sudo mkdir /tmp/test/hello
sudo chmod -R 700 /tmp/test
启动python:$ python,输入
import os
os.path.isdir("/tmp/test/hello")
得到False
以root启动python: $ sudo python,输入
import os
os.path.isdir("/tmp/test/hello")
得到True
结论,即使目录存在,os.path.isdir也可能因为权限问题而返回False,并且没有任何异常和警告。
时间: 2024-09-20 23:02:03