Вопрос: Почему я получаю ошибку sqlite, «невозможно открыть файл базы данных»?
Используя мое приложение Django, я могу просто читать из базы данных. Когда у приложения не было разрешения на доступ к файлу, он дал мне эту ошибку:
попытаться написать базу данных readonly
Это имело смысл. Поэтому я отредактировал разрешения для файла, так что процесс 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
Сообщите мне, нужна ли трассировка стека.
59
2017-08-23 12:08
Источник
Ответы:
Ага, просто споткнулся статья объясняя это. Также у Django есть информация об их NewbieMistakes стр.
Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись, разрешенный процессу.
В моем случае выполнение этой команды устранило проблему:
sudo chown www-data .
73
2017-08-23 12:14
Из Django говорит «Не удается открыть файл базы данных» при использовании SQLite3 раздел из Ошибки новобрачных Django wiki страница:
- убедитесь, что Apache также может записывать в родительский каталог базы данных
- убедитесь, что ни одна из папок полного пути файла базы данных не начинается с числа
- убедитесь, что полный путь
db
каталог существует
- убедитесь, что
/tmp
каталог доступен для всего мира
- убедитесь, что путь к базе данных указан в
settings.py
полный путь
- убедитесь, что в пути нет специальных символов
- в Windows убедитесь, что путь к каталогу db написан с двойными зазорами
6
2018-01-14 22:43
Мое решение было более похоже на это.
Я действительно не хотел менять права собственности на этот каталог. (в основном потому, что я использую пользователя pi для выполнения таких действий, как git)
/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi pi 25600 Jan 2 22:57 sqlite.db
(или что-нибудь, что вы используете)
где pi является пользователем, что я создал все файлы. (да, это малина pi)
Вместо того, чтобы изменять разрешения на www-data, я обнаружил, что мне нужно только изменить разрешения следующим образом:
sudo chmod 775 /var/www/mysite
sudo chmod 664 /var/www/mysite/sqlite.db
sudo usermod -a -G pi www-data
Это дает возможность записи группы на нужные файлы и добавляет пользователя www-данных в группу pi.
Примечание. Если у вас есть ведение журнала, вам нужно будет сделать это для файла журнала django, а apache ему не понравится.
5
2018-01-02 23:08
Добавление рабочего пользователя в группу www-data хорошо работает в моей тестовой среде.
Кроме того, я поместил файл sqlite3.db в отдельный вложенная, чтобы быть более безопасным.
Файл базы данных должен принадлежать www-data
sudo chown www-data mysite/db_sqlite3/
sudo chown www-data mysite/db_sqlite3/my.db
Моя операционная пользовательская hape получает член группы www-data:
sudo usermod -a -G www-data hape
Разрешить доступ к файлам базы данных для членов групповых www-данных:
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db
В результате к базе данных можно получить доступ к read + write by apache2-daemon (пользовательские www-данные) без предоставления гранта корневой папке проекта, а с другой стороны - приложение может быть запущено в режиме dev операционным пользовательский hape, например
./manage.py runserver
также.
5
2018-04-14 12:22
Заимствованный из 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
1
2018-01-04 13:22
Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись, разрешенный процессу.
Для Windows 7, 8.1, 10, Server 2012 и т. Д. Следуют Порядок установки Bonobo:
Разрешить пользователю IIS изменять
C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Для этого:
- выберите «Свойства папки App_Data»,
- перейдите на вкладку «Безопасность»,
- нажмите править,
- выберите пользователя IIS (в моем случае IIS_IUSRS) и добавьте разрешение на изменение и запись,
- подтвердите эти настройки кнопкой «Применить».
1
2017-11-11 20:23
Сервер разработки должен запускаться как один и тот же пользователь, у которого есть запись perms в папке базы данных, поэтому, если вы изначально создали базу данных с правами root, при запуске вам нужно быть root:
python manage.py runserver
0
2017-12-19 09:35
создать подкаталог в рабочем каталоге
mkdir db-folder
создать базу данных sqlite в поддиректории
sqlite3 db-folder/db.db
изменить владельца для подкаталога на www-данные в 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
0
2018-06-17 22:49
просто пиши sudo sqlite3 databaseFilename.sql
и это работа
-1
2018-01-03 07:21