#python #database #django #sqlite #django-settings
#python #База данных #django #sqlite #django-настройки
Вопрос:
Я получаю эту ошибку при настройке сервера в Django. Это sqlite3, что означает, что он должен создать файл .db, но, похоже, он этого не делает. Я указал SQLite в качестве серверной части и абсолютный путь к файлу, куда его поместить, но безуспешно.
Это ошибка или я делаю что-то неправильно? (Просто подумал, указан ли абсолютный путь к файлу по-другому в Ubuntu?)
Вот начало моего settings.py файл:
# Django settings for OmniCloud project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '~/Harold-Server/OmniCloud.db', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Комментарии:
1. Как жаль, что исходное сообщение об ошибке не содержит имени файла, которое вызывает ошибку, это могло бы немного помочь.
Ответ №1:
ПРОБЛЕМА Вы используете SQLite3, для вашего DATABASE_NAME задан полный путь к файлу базы данных, файл базы данных доступен для записи с помощью Apache, но вы все равно получаете указанную выше ошибку.
РЕШЕНИЕ Убедитесь, что Apache также может выполнять запись в родительский каталог базы данных. SQLite должен иметь возможность записи в этот каталог.
Убедитесь, что полный путь к каждой папке вашего файла базы данных не начинается с номера, например. /www/4myweb/db (наблюдается в Windows 2000).
Если для имени базы ДАННЫХ задано что-то вроде ‘/Users/yourname/Sites/mydjangoproject/db/ db’, сначала убедитесь, что вы создали каталог ‘db’.
Убедитесь, что ваш каталог / tmp доступен для записи во всем мире (маловероятная причина, поскольку другая вещь в вашей системе также не будет работать). ls /tmp -ald должен выдать drwxrwxrwt ….
Убедитесь, что путь к базе данных, указанный в settings.py это полный путь.
Также убедитесь, что файл присутствует там, где вы ожидаете.
Комментарии:
1. Как мне изменить разрешения Apache через командную строку в Linux?
2. Вы не меняете разрешения apache, вы меняете разрешения файла и папки, чтобы Apache мог читать и записывать в нужных местах. Вот руководство по chmod catcode.com/teachmod именно так вы меняете разрешения в Linux. хотя это должно быть просто chmod rw folder_name
3. Спасибо, «сначала убедитесь, что вы создали каталог ‘db'». это очень хороший намек 🙂
4. Джон, если я когда-нибудь буду в твоем городе, я должен тебе обед.
5.
chmod o w .
в папке файла DB это исправлено для меня.
Ответ №2:
Я столкнулся с точно такой же проблемой. Вот моя настройка, которая сработала.
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/path/to/your/db/data.sqlite3'
Другая настройка в случае sqlite3 будет такой же / по умолчанию.
И вам нужно создать data.sqlite3.
Ответ №3:
Вы не указали абсолютный путь — вы использовали ярлык , ~
, который может не работать в этом контексте. Используйте /home/yourusername/Harold-Server/OmniCloud.db
вместо этого.
Комментарии:
1. будет ли имя пользователя именем сервера или, поскольку я вошел в систему как root, root?
2. Никогда не входите в систему от имени пользователя root. Настройте пользователя для сайта Django или используйте пользователя Apache (обычно www-data).
3. Хорошо, я обращаюсь к серверу linode через ssh и добавил пользователя с именем Ned. Итак, мне нужно извлечь репозиторий из github, а затем запустить его на Ned?
Ответ №4:
Вам нужно использовать полный путь вместо ~/
.
В вашем случае что-то вроде /home/harold/Harold-Server/OmniCloud.db
.
Ответ №5:
В моем случае файл базы данных sqlite db.sqlite3
был сохранен в DocumentRoot
apache. Итак, даже после установки следующих разрешений это не сработало:
sudo chown www-data:www-data /path/to/db-folder
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db
Наконец, когда я перешел db.sqlite3
во вновь созданную dbfolder
папку DocumentRoot
и предоставил вышеуказанные разрешения, и это сработало.
Комментарии:
1. Это отлично сработало для меня от пользователя root — используя приложение flask для подключения к БД из каталога проекта. Сработал шарм — просто нужно, чтобы apache мог общаться с БД.
Ответ №6:
У меня была эта проблема с Apache, и я обнаружил, что использование абсолютного пути к базе данных sqlite3 в my .env ////
в отличие от использования относительного пути ///
устранило проблему. Все разрешения и права собственности, упомянутые выше, также необходимы.
Ответ №7:
используйте этот тип, он работает для меня. windows 7 с python 2.7 и django 1.5
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:\tool\mysite\data.db',
надеюсь, это сработает…