定位到問題所在:
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,並且沒有任何異常和警告。