2014-08-31 58 views
1

我有一個腳本,用於檢查json文件並將照片下載到文件夾中。如果django manage.py腳本搞砸了目錄權限

該位檢查目錄是否存在,如果沒有,創建它:

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] Permission denied: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 

我還檢查和其他文件夾,通過Django的管理員創建接口,也歸

解決方案:

的os.makedirs命令改爲由root擁有整個目錄樹,這就是爲什麼,即使有相同的權限其他文件夾的Django無法寫入該目錄。

爲防止它再次發生,解決方案是在創建新文件夾後將所有權恢復到該目錄樹。

+0

這個腳本,它運行的是什麼用戶? – 2014-08-31 19:40:53

+0

@BurhanKhalid我以root身份登錄到了Ubuntu服務器上。 – 2014-08-31 19:50:03

+0

你是否以root身份運行腳本? ('manage.py'腳本)。 – 2014-08-31 19:53:45

回答

2

問題是您以root身份運行腳本。

您運行程序的用戶是擁有該程序創建的任何文件的用戶。

以root用戶身份運行程序後,任何輸出都將由root用戶擁有,這意味着運行django應用程序的用戶將無權訪問這些文件。

您應該運行manage.py腳本,使創建的文件,然後由gunicorn過程可讀運行您的Web應用程序(nobody)相同的用戶 - 推而廣之,Django的。

2

退繞你的第一個問題:

  1. 創建了一些數據與糟糕的燙髮

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

  2. 運行管理。PY作爲Web服務器用戶

    $ sudo -u www-data ./manage.py <your-management-command>

注意:如果沒有設置sudo,則應該對其進行設置。