2011-10-06 32 views
36

Djangoでサーバーを設定するときにこのエラーが発生します。これはsqlite3です。つまり、.dbファイルを作成する必要がありますが、そうでないようです。私はSQLiteをバックエンドとして指定し、どこに置くかについての絶対的なファイルパスを指定しましたが、運はありません。sqlite3.OperationalError:データベースファイルを開くことができません

これはバグですか?正しくないことをしていますか?ここで

(?ただ、Ubuntuのでは異なって指定された絶対ファイルパスで考えていた)私のsettings.pyファイルの先頭である:あなたが持っていない

# 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

元のエラーメッセージがエラーの原因となるファイル名をカバーしていないことは、少し助けになるかもしれません。 – Hartmut

答えて

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

LinuxのコマンドラインからApacheのパーミッションをどのように変更できますか? – Chris

+0

Apacheが正しい場所で読み書きできるように、ファイルとフォルダのアクセス権を変更するApacheのアクセス権は変更しないでください。ここでは、chmod http://catcode.com/teachmod/のガイドがあります。これは、Linuxで権限を変更する方法です。しかし、ちょうどchmod + rwのfolder_name – John

+2

する必要があります私はそれを試みたが、同じエラーを取得している:( – Chris

7

絶対パスを指定しました。このコンテキストでは機能しないショートカット、~を使用しました。代わりに/home/yourusername/Harold-Server/OmniCloud.dbを使用してください。

+0

私はこれを試みたが、同じエラーがまだあった。 – Chris

+0

usernameはサーバの名前になりますか、rootとしてログインしていますのでrootですか? – Chris

+0

rootとしてログインしないでください。 Djangoサイトのユーザを設定するか、Apacheユーザ(通常www-データ)を使用します。 –

18

私は全く同じ問題に直面しました。ここに私の設定が働いた。

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

その他の設定はsqlite3と同じ/ defaultになります。
そして、data.sqlite3を作成する必要があります。

0

これは私のために働くタイプです。 のpython 2.7とWindows 7と1.5

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

をDjangoはあなたが代わりに~/の完全なパスを使用する必要があり、その作品...

4

を願っています。

あなたの場合は、/home/harold/Harold-Server/OmniCloud.dbのようなものです。

2

私の場合、sqlite dbファイルdb.sqlite3はApacheのDocumentRootに保存されていました。だから、でもそれは動作しませんでした次の権限を設定した後:最後に

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

を私はDocumentRootの下に、新しく作成したフォルダdbfolderdb.sqlite3を移動し、上記の権限を与え、それが働いたとき。

+0

これはrootユーザーから私のために完全に働いた - フラスコアプリを使用して、プロジェクトディレクトリ内のdbに接続する。魅力を尽くしました - 単にdbと話すことができるようにする必要があります。 –

関連する問題