web-dev-qa-db-ja.com

sqliteエラー「データベースファイルを開けません」が発生するのはなぜですか?

私のDjangoアプリを使用すると、データベースから問題なく読み取ることができます。アプリケーションがファイルにアクセスする権限を持っていなかった場合、次のエラーが発生しました。

読み取り専用データベースへの書き込みを試みます

それは理にかなっています。そこで、ファイルの権限を編集して、Apacheプロセスに書き込み権限を付与しました。ただし、書き込むことができる代わりに、次のような不可解なエラーが発生します。

データベースファイルを開けません

便利な場合は、出力全体を以下に示します。

Request Method: POST
Request URL:    http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:    
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/Django/db/backends/sqlite3/base.py in execute, line 193
Python Executable:  /usr/bin/python
Python Version: 2.5.2
Python Path:    ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time:    Sun, 23 Aug 2009 07:06:08 -0500

スタックトレースが必要かどうかをお知らせください。

65
Nick Bolton

ああ、ちょうど偶然出会った 記事 これを説明する。また、Django彼らの NewbieMistakes ページに情報があります。

解決策は、データベースファイルを含むディレクトリにもプロセスへの書き込みアクセスが許可されていることを確認することです。

私の場合、このコマンドを実行すると問題が解決しました:

Sudo chown www-data .
80
Nick Bolton

これに対する私の解決策は、そのようなものでした。このディレクトリの所有権を変更したくありませんでした。 (主に私がpiユーザーを使用してgitなどを行うため)

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(または使用しているdbは何でも)

ここで、piはすべてのファイルを作成したユーザーです(はい、これはRaspberry Piです)。

アクセス許可をwww-dataに変更する代わりに、次のようにアクセス許可を変更するだけでよいことがわかりました。

Sudo chmod 775 /var/www/mysite
Sudo chmod 664 /var/www/mysite/sqlite.db
Sudo usermod -a -G pi www-data

これにより、グループに必要なファイルへの書き込みアクセス権が付与され、www-dataユーザーがpiグループに追加されます。

注:ログを記録している場合は、Djangoログファイルも同様にこれを実行する必要があります。そうしないと、Apacheはあまり好きではありません。

7
SpiRail

Djangoから、SQLite3section の使用時に「データベースファイルを開くことができません」と表示されます初心者の間違いDjango wiki page

  1. apacheがデータベースの親ディレクトリにも書き込めることを確認してください
  2. データベースファイルのフルパスのフォルダが数字で始まっていないことを確認してください
  3. dbディレクトリの絶対パスが存在することを確認してください
  4. /tmpディレクトリが誰でも書き込み可能であることを確認してください
  5. settings.pyで指定されたデータベースへのパスが完全パスであることを確認してください
  6. パスに特殊文字が含まれていないことを確認してください
  7. windowsでは、dbディレクトリのパスが二重のバックスラッシュで書かれていることを確認してください
7
ssc

運用ユーザーをwww-dataグループに追加すると、私のテスト環境でうまく機能します。さらに、より安全にするために、sqlite3.dbファイルを個別のサブフォルダーに入れました。

データベースファイルはwww-dataが所有します

Sudo chown www-data mysite/db_sqlite3/
Sudo chown www-data mysite/db_sqlite3/my.db

私の運用ユーザーhapeは、www-dataグループのメンバーを取得します。

Sudo usermod -a -G www-data hape

グループwww-dataのメンバーにデータベースファイルの書き込みアクセスを許可します。

Sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
Sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db

その結果、Apache2-daemon(ユーザーwww-data)は、プロジェクトのルートフォルダーに許可を与えることなく、データベースに読み取りと書き込みのアクセスを行うことができます。ユーザーの好奇心、例えば.

./manage.py runserver

また。

5
Hartmut P.

SO質問から借用: https://stackoverflow.com/questions/4283132/Apache-instance-user-permission-issue

開始するファイルがApacheユーザーによって所有されていると仮定します。

% chown -R Apache.apache /var/www/mysite

ユーザー/グループpiのACLsを設定します。

% setfacl -d -m u:pi:rwx /var/www/mysite
% setfacl -d -m g:pi:rwx /var/www/mysite

% getfacl /var/www/mysite
# file: /var/www/mysite
# owner: Apache
# group: Apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:pi:rwx
default:group::r-x
default:group:pi:rwx
default:mask::rwx
default:other::r-x

ls -lの付いたACLがあり、権限ビットの末尾に「+」があることがわかります。

# ls -la /var/www
drwxr-xr-x   3 Apache   Apache   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 Apache   Apache   40 26. Nov 12:43 mysite
1
slm

解決策は、データベースファイルを含むディレクトリにもプロセスへの書き込みアクセスが許可されていることを確認することです。

Windows7、8.1、10、Server 2012などの場合は、 Bonoboインストール手順 に従います。

IISユーザーによるC:\ inetpub\wwwroot\Bonobo.Git.Server\App_Dataフォルダの変更を許可します。

そうするには:

  1. app_Dataフォルダーのプロパティを選択し、
  2. [セキュリティ]タブに移動し、
  3. 編集をクリックし、
  4. IISユーザー(私の場合はIIS_IUSRS))を選択し、変更および書き込み権限を追加します。
  5. [適用]ボタンでこれらの設定を確認します。
1
DEXTER360

開発サーバーは、データベースフォルダーに対する書き込み権限を持つ同じユーザーとして実行する必要があるため、最初にルートとしてデータベースを作成した場合は、実行時にルートである必要があります。

python manage.py runserver
0
Kilizo

作業ディレクトリにサブディレクトリを作成する

mkdir db-folder 

サブディレクトリにsqliteデータベースを作成する

sqlite3 db-folder/db.db

サブディレクトリの所有者をdebainのwww-dataまたはcentOSのApacheに変更します

chown -R www-data db-folder

冷たいビールを手に入れたら完了です。

P/S:手順が成功したかどうかを確認する

ls -l data-folder

あなたはそのようなものを見るはずです

-rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder
0
brotich