web-dev-qa-db-ja.com

Djangoは「データベースファイルを開けません」

「python manage.py syncdb」を実行した後、「データベースファイルを開けません」というエラーが表示されます。

これが私のsettings.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

My DjangoサーバーはApacheから呼び出されます...権限に関係するかどうかはわかりませんが、apps.dbの所有者を "www-data"に変更しても機能しませんでした。

[編集]

www-dataがこのすべてにアクセスできるようにするために、私は次のことをしました:

以下を行いました:

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

しかし、まだ動作しません:(

36
niklasfi

DATABASE_NAMEを絶対パスに変更することでエラーを解決しました:/var/www/apps/apps.db

Windowsマシンでは、バックスラッシュを次のようにエスケープする必要があります:C:\\path\\to\\database\\database_name.db

17
niklasfi

NewbieMistakesのソリューション

Apacheがデータベースの親ディレクトリにも書き込みできることを確認してください。 SQLiteはこのディレクトリに書き込むことができる必要があります。

データベースファイルのフルパスの各フォルダーが数字で始まっていないことを確認してください。/www/4myweb/db(Windows 2000で観察)。

DATABASE_NAMEが「/ Users/yourname/Sites/mydjangoproject/db/db」などのように設定されている場合は、「db」ディレクトリを最初に作成したことを確認してください。

/ tmpディレクトリが誰でも書き込み可能であることを確認してください(システム上の他のものも機能しないため、考えられない原因です)。 ls/tmp -aldはdrwxrwxrwt ...を生成するはずです。

Settings.pyで指定されたデータベースへのパスがフルパスであることを確認してください。

50
Shwetabh Sharan

DATABASE_NAMEは非推奨です。現在サポートされている形式を使用する必要があります。つまり.

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

}

また、Django Webサイト。:))から廃止された他の設定も参照してください。

3
ejjyrex

私のLinuxシステムでは、プロセス所有者にdb.sqlite3ディレクトリの両方への書き込み許可を与える必要がありましたそれを含んでいた!代わりにsetfaclを使用できます!例:( 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
2
Raptor

さて、私はこの質問に答えました。 http://goo.gl/KAuXz

私はまったく同じ問題に直面しました。これがうまくいった私の設定です。

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

Sqlite3の場合のその他の設定は同じ/デフォルトになります。

1
chhantyal

親ディレクトリの権限を変更するには、以下の一連のコマンドを使用できます。

apache v2のApacheプロセスを確認します。

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

0
user2858738