Джанго "не может открыть файл базы данных" - PullRequest
35 голосов
/ 19 июля 2010

после запуска «python manage.py syncdb» я получаю сообщение об ошибке «невозможно открыть файл базы данных».

вот важная часть из моих настроек.py:

DATABASE_ENGINE = 'sqlite3'    # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'apps.db'      # Or path to database file if using sqlite3.
DATABASE_USER = ''             # Not used with sqlite3.
DATABASE_PASSWORD = ''         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

и вот разрешения для "apps.db":

-rw-r--r-- 1 root root 33792 19. Jul 10:51 apps.db

Мой сервер django вызывается из apache ... Я не знаю, связано ли это с разрешениями, но сменил владельцаapps.db для "www-data" также не работал

[edit]

, чтобы обеспечить доступ www-данных ко всему этому, я сделал следующее:

сделалследующее:

chown -R www-data apps
rm apps.db
su www-data
python manage.py syncdb

но все равно не работает: (

Ответы [ 6 ]

49 голосов
/ 05 апреля 2012

Решение от NewbieMistakes

Убедитесь, что Apache также может писать в родительский каталог база данных. SQLite должен иметь возможность записи в этот каталог.

Убедитесь, что каждая папка с полным путем файла базы данных не запускается с номером, например. / www / 4myweb / db (наблюдается в Windows 2000).

Если для DATABASE_NAME установлено что-то вроде '/ Users / ваше имя / сайты / mydjangoproject / db / db', убедитесь, что вы сначала создал каталог 'db'.

Убедитесь, что ваш каталог / tmp доступен для записи во всем мире (маловероятно, что другая вещь в вашей системе также не будет работать). ls / tmp -ald должен производить drwxrwxrwt ....

Убедитесь, что путь к базе данных, указанной в settings.py, является полным путь.

17 голосов
/ 19 июля 2010

Я решил ошибку, изменив DATABASE_NAME на абсолютный путь: /var/www/apps/apps.db.

На машине с Windows обратная косая черта должна быть экранирована следующим образом: C:\\path\\to\\database\\database_name.db.

3 голосов
/ 07 апреля 2012

DATABASE_NAME устарела.Вы должны использовать текущий поддерживаемый формат.т.е.

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': 'C:/ispdb.sqlite',
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': ''

}

А также увидеть другие настройки, которые устарели с сайта django. :))

2 голосов
/ 14 июня 2016

Для моей системы linux мне пришлось дать владельцу процесса разрешение на запись как в каталог db.sqlite3 , так и в каталог , в котором она находилась! Вы могли бы просто установить вместо этого facl! пример: (https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting).

(py2.7) [me @ server django-project-container] $ ls -la djangoproject /

drwxrwxr-x. 6 root nginx  4096 Jun 14 01:05 .
drwxr-xr-x. 6 root root  4096 Jun 13 23:47 ..
-rwxrwxrwx. 1 root nginx 49152 Jun 14 01:05 db.sqlite3
1 голос
/ 28 июня 2012

Ну, я ответил на этот вопрос. http://goo.gl/KAuXz

Я столкнулся с точно такой же проблемой. Вот моя настройка, которая сработала.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/neo/django/db/data.sqlite3'

Другие настройки в случае sqlite3 будут такими же / по умолчанию.

0 голосов
/ 13 апреля 2018

Чтобы изменить разрешение родительского каталога, вы можете использовать следующий набор команд:

проверка процесса apache для apache v2:

ps -ef | grep apache | grep -v grep

пользователь / группа www-data

chgrp www-data /path/to/mydir
chmod g+w /path/to/mydir

Ссылка: https://askubuntu.com/questions/58725/how-do-we-know-that-a-directory-is-apache-writable

...