Django
為什麼我會收到 sqlite 錯誤,“無法打開數據庫文件”?
使用我的 Django 應用程序,我可以很好地從數據庫中讀取數據。當應用程序無權訪問該文件時,它給了我這個錯誤:
嘗試寫一個只讀數據庫
這是有道理的。所以我編輯了文件的權限,使Apache程序具有寫權限。但是,我得到了這個神秘的錯誤,而不是它能夠寫入:
無法打開數據庫文件
如果它有用,這裡是整個輸出:
Request Method: POST Request URL: http://home-sv-1/hellodjango1/polls/1/vote/ Exception Type: OperationalError Exception Value: unable to open database file Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193 Python Executable: /usr/bin/python Python Version: 2.5.2 Python Path: ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0'] Server time: Sun, 23 Aug 2009 07:06:08 -0500
讓我知道是否需要堆棧跟踪。
啊哈,剛剛偶然發現一篇解釋這一點的文章。Django 在他們的NewbieMistakes頁面上也有資訊。
解決方案是確保包含數據庫文件的目錄也允許對該程序進行寫訪問。
在我的例子中,執行這個命令解決了這個問題:
sudo chown www-data .
我對此的解決方案更像這樣。我真的不想改變這個目錄的所有權。(主要是因為我使用 pi 使用者來做 git 之類的事情)
/var/www/mysite $ ls -la sql* -rw-rw-r-- 1 pi pi 25600 Jan 2 22:57 sqlite.db
(或您正在使用的任何數據庫)
其中 pi 是我在其中創建所有文件的使用者。(是的,這是一個樹莓派)
我發現我只需要像這樣更改權限,而不是更改對 www-data 的權限:
sudo chmod 775 /var/www/mysite sudo chmod 664 /var/www/mysite/sqlite.db sudo usermod -a -G pi www-data
這使組可以對必要的文件進行寫訪問,並將 www-data 使用者添加到 pi 組。
注意:如果您有日誌記錄,您也需要為 django 日誌文件執行此操作,否則 apache 不會很喜歡它。