![](/img/trans.png)
[英]Django Polls App: OperationalError: attempt to write a read only database
[英]Django: Attempt to write a read-only database
我剛剛創建了一個Django項目
python manage.py startapp smartrecruitment
然后我運行了db sync
python manage.py syncdb
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
並添加了我的超級用戶,但我無法在瀏覽器中訪問/ admin。 我嘗試過以下命令來授予apache權限,但沒有運氣。
sudo chown apache <folder_containing_db.sqlite3>
sudo chown apache db.sqlite3
更改項目目錄和數據庫文件www-data
所有者
chown www-data:www-data /home/username/Django
chown www-data:www-data /home/username/Django/db.sqlite
您確實存在用戶/組權限問題:您需要使用對您的db文件具有讀/寫訪問權限的用戶運行您的Web服務器(使用sqlite3時)
更改整個項目的所有者和組是一個壞主意,因為它允許您的Web服務器用戶在您的代碼庫上編寫,這絕不是一個好習慣 。
更好的想法是在生產中使用真實數據庫而不是sqlite來避免這種情況。
https://docs.djangoproject.com/en/1.9/ref/settings/#databases
如果你想堅持使用sqlite:將sqlite文件放在項目存儲庫之外並給它和包含目錄正確的讀/寫訪問(例如只有www-data可以寫,但是你需要運行你的django命令作為www -數據)
some_dir [your_user:your_group]
--- your_django_project [github_user:github_user]
--- another_dir [www-data:www-data]
|--- db.sqlite3 [www-data:www-data]
您的網絡服務器(apache / nginx)作為www-data運行
我正在尋找解決方案,因為我通過此鏈接關注了CentOS教程。 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-centos-7
這是該教程的權限,
sudo usermod -a -G root apache
chmod 710 /root/myproject
chown apache:apache /root/myproject
chown apache:apache /root/myproject/db.sqlite
簡而言之,當寫入sqlite數據庫的應用程序沒有寫入權限時,就會發生這種情況。
這可以通過三種方式解決:
db.sqlite3
文件及其父目錄(從而也可以寫訪問權限)的所有權(例如: chown username db.sqlite3
) gunicorn
或django runserver
之前運行命令sudo -i
) chmod 777 db.sqlite3
(危險選項)對所有用戶進行讀寫訪問 注意 :除非您在本地計算機上運行Web服務器,否則永遠不要使用第三個選項,否則數據庫中的數據對您來說並不重要。
第二種選擇也很危險,因為@mateuszb說。 Django的代碼注入風險非常低,因為Django是以這種方式設計的。 在Django中,只有當開發人員使用eval
或exec
編寫可怕的易受攻擊的代碼時,才能捕獲整個操作系統。 如果您對代碼質量沒有信心,甚至不知道代碼注入是什么,則第二個選項不適合您。
此外,如果您使用的是像mysql和Postgres這樣的數據庫,則不會發生此錯誤。 對於流量較大的網絡服務器來說,Sqlite不是一個好選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.