it-swarm-ru.tech

Почему я получаю ошибку sqlite "невозможно открыть файл базы данных"?

Используя мое приложение 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

Дайте мне знать, если трассировка стека необходима.

65
Nick Bolton

Ага, просто наткнулся статья объясняя это. Также Django есть информация на их NewbieMistakes странице.

Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись, разрешенный для процесса.

В моем случае запуск этой команды устранил проблему:

Sudo chown www-data .
80
Nick Bolton

Мое решение этого было больше похоже на это. Я действительно не хотел менять владельца этого каталога. (в основном потому, что я использую пользователя pi для таких вещей, как git)

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(или какую бы базу данных вы не использовали)

где пи - это пользователь, в котором я создал все файлы. (да, это Raspberry Pi)

Вместо того, чтобы изменять разрешения для 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 это не понравится.

7
SpiRail

Из Джанго говорит "Невозможно открыть файл базы данных" при использовании SQLite3 section из Ошибки новичка Django wiki page :

  1. убедитесь, что Apache также может писать в родительский каталог базы данных
  2. убедитесь, что ни одна из папок полного пути файла базы данных не начинается с числа
  3. убедитесь, что полный путь к каталогу db существует
  4. убедитесь, что ваш /tmp каталог доступен для записи
  5. убедитесь, что путь к базе данных указан в settings.py полный путь
  6. убедитесь, что в пути нет специальных символов
  7. в Windows убедитесь, что путь к каталогу db записан с двойной обратной обратной
7
ssc

Добавление работающего пользователя в группу www-data хорошо работает в моей тестовой среде. Кроме того, я поместил файл sqlite3.db в отдельную подпапку, чтобы быть более безопасным.

Файл базы данных должен принадлежать www-данным

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-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

также.

5
Hartmut P.

Заимствовано из 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
slm

Решение состоит в том, чтобы убедиться, что каталог, содержащий файл базы данных, также имеет доступ на запись, разрешенный для процесса.

Для Windows 7, 8.1, 10, Server 2012 и т.д. Следуйте инструкции по установке Bonobo :

Разрешить IIS Пользователь может изменить папку C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data.

Для этого:

  1. выберите Свойства папки App_Data,
  2. перейдите на вкладку Безопасность,
  3. нажмите изменить,
  4. выберите IIS пользователя (в моем случае IIS_IUSRS) и добавьте разрешение на изменение и запись,
  5. подтвердите эти настройки кнопкой Применить.
1
DEXTER360

Сервер разработки должен быть запущен от имени того же пользователя, у которого есть права на запись в папку базы данных, поэтому, если вы изначально создали базу данных как root, вам нужно быть пользователем root при запуске:

python manage.py runserver
0
Kilizo

создать подкаталог в рабочем каталоге

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
brotich