2011-10-06 24 views
36

Otrzymuję ten błąd podczas konfigurowania serwera w Django. Jest to sqlite3, co oznacza, że ​​powinien utworzyć plik .db, ale wydaje się, że tak nie jest. Postanowiłem, że SQLite będzie zapleczem i bezwzględną ścieżką do pliku, gdzie można ją umieścić, ale bez powodzenia.sqlite3.OperationalError: nie można otworzyć pliku bazy danych

Jest to błąd albo robię coś niepoprawne? (Właśnie myślenia, jest absolutna ścieżka do pliku określono inaczej w Ubuntu?)

Oto początek mojej settings.py pliku:

# Django settings for OmniCloud project. 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
# ('Your Name', '[email protected]'), 
) 

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. 
} 
} 
+2

Co za szkoda, że ​​oryginalny komunikat o błędzie nie obejmuje nazwy pliku, który powoduje błąd, który może pomóc trochę. – Hartmut

Odpowiedz

60

Django NewbieMistakes

PROBLEM You're using SQLite3, your DATABASE_NAME is set to the database file's full path, the database file is writeable by Apache, but you still get the above error.

SOLUTION Make sure Apache can also write to the parent directory of the database. SQLite needs to be able to write to this directory.

Make sure each folder of your database file's full path does not start with number, eg. /www/4myweb/db (observed on Windows 2000).

If DATABASE_NAME is set to something like '/Users/yourname/Sites/mydjangoproject/db/db', make sure you've created the 'db' directory first.

Make sure your /tmp directory is world-writable (an unlikely cause as other thing on your system will also not work). ls /tmp -ald should produce drwxrwxrwt ....

Make sure the path to the database specified in settings.py is a full path.

Also make sure the file is present where you expect it to be.

+0

Jak mogę zmienić uprawnienia Apache'a za pomocą linii poleceń w systemie Linux? – Chris

+0

Nie zmieniasz uprawnień Apache, zmieniasz uprawnienia pliku i folderu, aby Apache mógł czytać i pisać we właściwych miejscach. Oto przewodnik do chmod http://catcode.com/teachmod/, w jaki sposób zmieniasz uprawnienia w linuxie. choć powinno to być po prostu chmod + RW folder_name – John

+2

Ok próbowałem tego, ale wciąż otrzymuję ten sam błąd :( – Chris

7

nie masz podała absolutną ścieżkę - użyłeś skrótu, ~, który może nie działać w tym kontekście. Zamiast tego użyj /home/yourusername/Harold-Server/OmniCloud.db.

+0

Próbowałem tego, ale wciąż mam ten sam błąd. – Chris

+0

nazwa użytkownika będzie nazwą serwera lub, od kiedy jestem zalogowany jako root, root? – Chris

+0

Nie loguj się jako root, nigdy. Skonfiguruj użytkownika dla witryny Django lub użyj użytkownika Apache (zazwyczaj dane www). –

18

Zmierzyłem się dokładnie z tym samym problemem. Oto moje ustawienie, które działało.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3' 

Inne ustawienia w przypadku sqlite3 będą takie same/domyślne.
Musisz utworzyć plik data.sqlite3.

0

użyj tego typu działa to dla mnie. windows 7 z Pythona 2.7 i Django 1,5

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': 'C:\\tool\\mysite\\data.db', 

nadzieję swoje prace ...

4

Trzeba użyć pełnej ścieżki zamiast ~/.

W twoim przypadku, coś /home/harold/Harold-Server/OmniCloud.db.

2

W moim przypadku plik db sqite db.sqlite3 był przechowywany w DocumentRoot apache. Tak więc, nawet po ustawieniu następujące uprawnienia to nie działa:

sudo chown www-data:www-data /path/to/db-folder 
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db 

Wreszcie kiedy przeprowadziłem db.sqlite3 do nowo utworzonego folderu dbfolder pod DocumentRoot i dał powyższe uprawnienia, i to działało.

+0

To działało dla mnie doskonale od użytkownika root - za pomocą aplikacji do obsługi kolb do połączenia z db z katalogu projektu. Zadziałał urok - wystarczy, że apache będzie mógł rozmawiać z bazą danych. –

Powiązane problemy