Используя мое приложение 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 есть информация об их НовичокОшибки страница.
Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись для процесса.
В моем случае выполнение этой команды устранило проблему:
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
(или любой другой БД, который вы используете)
где пи - это пользователь, в котором я создал все файлы (да, это малиновый пи)
Вместо изменения разрешений на www-данные я обнаружил, что мне нужно только изменить разрешения следующим образом:
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 это не очень понравится.
Из Django сообщает "Невозможно открыть файл базы данных" при использовании SQLite3 раздел из Ошибки новичка Django вики страница:
db
каталог действительно существует/tmp
каталог доступен для записи всемsettings.py
это полный путьДобавление рабочего пользователя в группу www-data хорошо работает в моей тестовой среде. Кроме того, я поместил файл sqlite3.db в отдельный подпапка, чтобы быть в большей безопасности.
Файл базы данных должен принадлежать www-data
sudo chown www-data mysite/db_sqlite3/
sudo chown www-data mysite/db_sqlite3/my.db
Мой оперативный пользователь, похоже, попал в группу www-data:
sudo usermod -a -G www-data hape
Разрешить доступ на запись к файлу базы данных членам группы www-data:
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db
В результате к базе данных можно получить доступ для чтения и записи с помощью apache2-daemon (пользовательские www-данные) без предоставления разрешения на корневую папку проекта, и, с другой стороны, приложение может быть запущено в режиме разработки операционным пользователь, например
./manage.py runserver
также.
Заимствовано из вопроса SO: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
Предполагая, что файлы принадлежат пользователю apache для запуска:
% chown -R apache.apache /var/www/mysite
устанавливать ACLs
для пользователя / группы pi:
% setfacl -d -m u:pi:rwx /var/www/mysite
% setfacl -d -m g:pi:rwx /var/www/mysite
% getfacl /var/www/mysite
# file: /var/www/mysite
# owner: apache
# group: apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:pi:rwx
default:group::r-x
default:group:pi:rwx
default:mask::rwx
default:other::r-x
Вы можете сказать, что есть ACL
с участием ls -l
, завершающий "+" битов разрешений:
# ls -la /var/www
drwxr-xr-x 3 apache apache 80 26. Nov 12:43 .
drwxrwxrwt 15 root root 360 26. Nov 12:40 ..
drwxrwxr-x+ 2 apache apache 40 26. Nov 12:43 mysite
Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись для процесса.
Для Windows 7, 8.1, 10, Server 2012 и т. Д. Следуйте Инструкции по установке Bonobo:
Разрешить пользователю IIS изменять папку C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Для этого:
Сервер разработки должен запускаться от имени того же пользователя, у которого есть разрешения на запись в папке базы данных, поэтому, если вы изначально создавали базу данных как root, вам нужно будет быть root при запуске:
python manage.py runserver
создать подкаталог в рабочем каталоге
mkdir db-folder
создать базу данных sqlite в подкаталоге
sqlite3 db-folder/db.db
изменить владельца подкаталога на www-data в debain или apache в CentOS
chown -R www-data db-folder
и возьмите холодного пива, потому что все готово.
P / S: проверить, прошла ли процедура успешно
ls -l data-folder
ты должен увидеть такое
-rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder
просто пиши sudo sqlite3 databaseFilename.sql
и это работа