Korzystając z mojej aplikacji Django, mogę dobrze czytać z bazy danych. Gdy aplikacja nie miała uprawnień dostępu do pliku, dał mi ten błąd:
próba napisania bazy danych tylko do odczytu
Co miało sens. Zedytowałem więc uprawnienia do pliku, aby proces Apache miał uprawnienia do zapisu. Jednak zamiast móc pisać, pojawia się ten tajemniczy błąd:
nie można otworzyć pliku bazy danych
Jeśli jest to przydatne, oto cały wynik:
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
Daj mi znać, jeśli konieczne jest śledzenie stosu.
Odpowiedzi:
Aha, właśnie natknąłem się na artykuł wyjaśniający to. Również Django ma informacje na swojej stronie NewbieMistakes .
Rozwiązaniem jest upewnienie się, że katalog zawierający plik bazy danych ma również dostęp do zapisu do procesu.
W moim przypadku uruchomienie tego polecenia rozwiązało problem:
źródło
chown www-data. .
tak naprawdę powinno byćchown www-data .
inaczej, istnieje jakiś czarodziej polecenia chown, o którym nie wiem ... proszę oświeć mnie.Moje rozwiązanie tego było bardziej podobne. Tak naprawdę nie chciałem zmieniać właściciela tego reżimu. (głównie dlatego, że używam pi do robienia rzeczy takich jak git)
(lub cokolwiek, którego używasz db)
gdzie pi to użytkownik, w którym utworzyłem wszystkie pliki. (tak, to malinowe pi)
Zamiast zmieniać uprawnienia do danych www, stwierdziłam, że muszę jedynie zmienić uprawnienia w następujący sposób:
Daje to grupie dostęp do zapisu niezbędnych plików i dodaje użytkownika danych www do grupy pi.
Uwaga: jeśli masz logowanie, musisz to zrobić również dla pliku dziennika django, w przeciwnym razie apache nie spodoba się zbytnio.
źródło
Z Django mówi: „Nie można otworzyć pliku bazy danych” przy użyciu SQLite3 sekcję z pomyłek Newbie Django wiki stronie :
db
katalogu istnieje/tmp
katalogu można zapisać światsettings.py
to pełna ścieżkaźródło
Dodanie użytkownika operacyjnego do grupy danych www działa dobrze w moim środowisku testowym. Dodatkowo umieściłem plik sqlite3.db w osobnym podfolderze , aby był bardziej bezpieczny.
Plik bazy danych jest własnością www-data
Mój użytkownik operacyjny otrzymuje członka grupy danych www:
Zezwól na dostęp do pliku bazy danych do zapisu członkom grupy www-data:
W rezultacie do bazy danych można uzyskać dostęp do odczytu i zapisu przez apache2-daemon (dane www użytkownika), bez udzielania zgody na folder główny projektu, a - z drugiej strony - aplikację można uruchomić w trybie deweloperskim przez system operacyjny Hape użytkownika, np
również.
źródło
Zapożyczono z SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Zakładając, że pliki są własnością użytkownika apache, aby rozpocząć:
ustawiony
ACLs
dla użytkownika / grupy pi:Można powiedzieć Jest takie
ACL
zls -l
, tylna „+” na bity uprawnień:źródło
W przypadku Windows 7, 8.1, 10, Server 2012 itd. Postępuj zgodnie ze wskazówkami instalacji Bonobo :
Pozwól użytkownikowi IIS modyfikować folder C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Aby to zrobić:
źródło
Serwer programistyczny musi być uruchomiony jako ten sam użytkownik, który ma uprawnienia do zapisu w folderze bazy danych, więc jeśli pierwotnie utworzyłeś bazę danych jako root, będziesz musiał być rootem podczas uruchamiania:
źródło
root
jest okropnym pomysłem - Lepiej byłoby, gdybychown
baza danych była dla zwykłego nieuprzywilejowanego użytkownika, który normalnie uruchamia serwer ...utwórz podkatalog w katalogu roboczym
utwórz bazę danych sqlite w podkatalogu
zmień właściciela podkatalogu na www-data w debain lub apache w centOS
i weź zimne piwo, bo gotowe.
P / S: aby sprawdzić, czy procedura zakończyła się powodzeniem
powinieneś zobaczyć takie
źródło
po prostu napisz
sudo sqlite3 databaseFilename.sql
i to działaźródło