Mit meiner Django-App kann ich problemlos aus der Datenbank lesen. Wenn die Anwendung keine Berechtigung zum Zugriff auf die Datei hatte, gab es mir diesen Fehler:
Versuchen Sie, eine schreibgeschützte Datenbank zu schreiben
Was Sinn machte. Daher habe ich die Berechtigungen für die Datei bearbeitet, sodass der Apache-Prozess über Schreibberechtigungen verfügt. Anstatt jedoch schreiben zu können, erhalte ich diesen kryptischen Fehler:
Datenbankdatei kann nicht geöffnet werden
Wenn es nützlich ist, hier ist die gesamte Ausgabe:
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
Lassen Sie mich wissen, ob ein Stack-Trace erforderlich ist.
Antworten:
Aha, bin gerade auf einen Artikel gestoßen, der das erklärt. Auch Django hat Infos auf ihrer NewbieMistakes- Seite.
Die Lösung besteht darin, sicherzustellen, dass das Verzeichnis, das die Datenbankdatei enthält, auch Schreibzugriff auf den Prozess hat.
In meinem Fall hat das Ausführen dieses Befehls das Problem behoben:
quelle
chown www-data. .
eigentlich etwaschown www-data .
anderes sein, gibt es einen Zauberer des Befehls chown, von dem ich nichts weiß ... bitte klären Sie mich auf.Meine Lösung dafür war eher so. Ich wollte den Besitzer dieses Verzeichnisses nicht wirklich ändern. (hauptsächlich, weil ich den pi-Benutzer benutze, um Dinge wie git zu tun)
(oder was auch immer du verwendest)
Wobei pi der Benutzer ist, in dem ich alle Dateien erstellt habe. (Ja, dies ist ein Himbeer-pi.)
Anstatt die Berechtigungen für www-data zu ändern, musste ich nur die folgenden Berechtigungen ändern:
Dies gibt der Gruppe Schreibzugriff auf die erforderlichen Dateien und fügt den Benutzer www-data der pi-Gruppe hinzu.
Hinweis: Wenn Sie sich angemeldet haben, müssen Sie dies auch für die Django-Protokolldatei tun, da es Apache nicht gefällt.
quelle
Im Django steht "Datenbankdatei kann nicht geöffnet werden", wenn der SQLite3- Abschnitt der Django-Wiki- Seite " Newbie mistakes" verwendet wird :
db
Verzeichnisses vorhanden ist/tmp
Verzeichnis schreibgeschützt istsettings.py
ein vollständiger Pfad istquelle
Das Hinzufügen eines operativen Benutzers zur WWW-Datengruppe funktioniert in meiner Testumgebung gut. Außerdem habe ich die Datei sqlite3.db in einem separaten Unterordner abgelegt, um die Sicherheit zu erhöhen .
Die Datenbankdatei gehört www-data
Mein operativer Benutzer hape wird Mitglied der WWW-Datengruppe:
Ermöglichen Sie den Schreibzugriff auf Datenbankdateien für Mitglieder der Gruppe www-data:
Infolgedessen kann apache2-daemon (Benutzer www-data) lesend und schreibend auf die Datenbank zugreifen, ohne dem Projektstammordner eine Berechtigung zu erteilen, und andererseits kann die App vom Benutzer im dev-Modus ausgeführt werden Benutzer hape, z
ebenfalls.
quelle
Ausgeliehen von SO-Frage: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Vorausgesetzt, die Dateien gehören dem Apache-Benutzer, um zu starten:
Set
ACLs
für Benutzer / Gruppe pi:Sie können feststellen, dass die Berechtigungsbits
ACL
mitls -l
einem abschließenden '+' versehen sind:quelle
Befolgen Sie für Windows 7, 8.1, 10, Server 2012 usw. die Bonobo-Installationsanweisungen :
IIS-Benutzer darf den Ordner C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data ändern.
Um dies zu tun:
quelle
Der Entwicklungsserver muss als derselbe Benutzer ausgeführt werden, der über Schreibrechte für den Datenbankordner verfügt. Wenn Sie die Datenbank also ursprünglich als Root erstellt haben, müssen Sie bei der Ausführung als Root angemeldet sein:
quelle
root
ist es eine schreckliche Idee , den Server so zu betreiben - Es wäre besser,chown
die Datenbank dem regulären, nicht privilegierten Benutzer zuErstellen Sie ein Unterverzeichnis im Arbeitsverzeichnis
Erstellen Sie eine SQLite-Datenbank im Unterverzeichnis
Ändern Sie den Eigentümer des Unterverzeichnisses in www-data in debain oder in apache in centOS
und schnapp dir ein kaltes Bier, denn du bist fertig.
P / S: um zu überprüfen, ob der Vorgang erfolgreich war
Sie sollten solche sehen
quelle
schreib einfach
sudo sqlite3 databaseFilename.sql
und es funktioniertquelle