Django

為什麼我會收到 sqlite 錯誤,“無法打開數據庫文件”?

  • September 18, 2020

使用我的 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 不會很喜歡它。

引用自:https://serverfault.com/questions/57596