私の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
スタックトレースが必要かどうかをお知らせください。
ああ、ちょうど偶然出会った 記事 これを説明する。また、Django彼らの NewbieMistakes ページに情報があります。
解決策は、データベースファイルを含むディレクトリにもプロセスへの書き込みアクセスが許可されていることを確認することです。
私の場合、このコマンドを実行すると問題が解決しました:
Sudo chown www-data .
これに対する私の解決策は、そのようなものでした。このディレクトリの所有権を変更したくありませんでした。 (主に私が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はあまり好きではありません。
Djangoから、SQLite3section の使用時に「データベースファイルを開くことができません」と表示されます初心者の間違いDjango wiki page :
db
ディレクトリの絶対パスが存在することを確認してください/tmp
ディレクトリが誰でも書き込み可能であることを確認してくださいsettings.py
で指定されたデータベースへのパスが完全パスであることを確認してください運用ユーザーを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
また。
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
解決策は、データベースファイルを含むディレクトリにもプロセスへの書き込みアクセスが許可されていることを確認することです。
Windows7、8.1、10、Server 2012などの場合は、 Bonoboインストール手順 に従います。
IISユーザーによるC:\ inetpub\wwwroot\Bonobo.Git.Server\App_Dataフォルダの変更を許可します。
そうするには:
開発サーバーは、データベースフォルダーに対する書き込み権限を持つ同じユーザーとして実行する必要があるため、最初にルートとしてデータベースを作成した場合は、実行時にルートである必要があります。
python manage.py runserver
作業ディレクトリにサブディレクトリを作成する
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