Используя мое приложение 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 .
Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись, разрешенный для процесса.
В моем случае запуск этой команды устранил проблему:
источник
chown www-data. .
самом деле должно бытьchown www-data .
иначе, есть какая-то волшебная команда Чоун, о которой я не знаю ... пожалуйста, просветите меня.Мое решение этого было больше похоже на это. Я действительно не хотел менять владельца этого каталога. (в основном потому, что я использую пользователя pi для таких вещей, как git)
(или какую бы базу данных вы не использовали)
где пи - это пользователь, в котором я создал все файлы. (да, это малиновый пи)
Вместо того, чтобы изменять разрешения для www-данных, я обнаружил, что мне нужно всего лишь изменить разрешения:
Это дает группе доступ на запись к необходимым файлам и добавляет пользователя www-data в группу pi.
Примечание: если у вас есть логирование, вам нужно будет сделать это и для лог-файла django, иначе apache не понравится.
источник
В Django говорится «Невозможно открыть файл базы данных» при использовании раздела SQLite3 на вики- странице ошибок Django для новичков :
db
каталогу существует/tmp
каталог доступен для записиsettings.py
является полным путемисточник
Добавление работающего пользователя в группу www-data хорошо работает в моей тестовой среде. Кроме того , для большей безопасности я поместил файл sqlite3.db в отдельную подпапку .
Файл базы данных должен принадлежать www-данным
Мой оперативный пользователь hape получает члена группы www-data:
Разрешить запись в файл базы данных членам группы www-data:
В результате к базе данных можно получить доступ для чтения и записи с помощью apache2-daemon (пользовательские www-данные), не предоставляя права доступа к корневой папке проекта, и, с другой стороны, приложение может быть запущено в режиме разработки операционной системой. пользователь хап, например
также.
источник
Заимствовано из SO вопроса: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Предполагая, что файлы принадлежат пользователю apache для запуска:
установить
ACLs
для пользователя / группы пи:Вы можете сказать, что есть
ACL
сls -l
, завершающий '+' в битах разрешений:источник
Для Windows 7, 8.1, 10, Server 2012 и т. Д. Следуйте инструкциям по установке Bonobo :
Разрешить пользователю IIS изменять папку C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Для этого:
источник
Сервер разработки должен запускаться от имени того же пользователя, у которого есть права на запись в папку базы данных, поэтому, если вы изначально создали базу данных от имени пользователя root, вам нужно быть пользователем root при запуске:
источник
root
это ужасная идея - Было бы лучше , чтобыchown
базы данных на регулярной непривилегированного пользователя , который обычно работает сервер ...создать подкаталог в рабочем каталоге
создать базу данных sqlite в подкаталоге
смените владельца подкаталога на www-данные в debain или apache в centOS
и хватай холодного пива, потому что все готово.
P / S: проверить, была ли процедура успешной
ты должен увидеть такое
источник
просто пиши
sudo sqlite3 databaseFilename.sql
и это работаисточник