web-dev-qa-db-ja.com

ファイルのアップロード中のDjangoによるアクセス拒否エラー

私は現在、 Djangoサムネイル プラグインを使用した写真アップロード機能を使用して、簡単なモデルを定義しています。

しかし、アップロードしようとすると、次のエラーが表示されます。

OSError at /admin/products/photo/add/

(13, 'Permission denied')

これは権限の問題のようですが、最初に確認したのはディレクトリの権限であり、これらを777(テストするだけ)に変更し、サーバーとfcgiを再起動してもエラーが発生します。

トレースバック

Traceback: File "/usr/lib/python2.6/dist-packages/Django/core/handlers/base.py" in get_response
  92.                 response = callback(request, *callback_args,
**callback_kwargs) File "/usr/lib/python2.6/dist-packages/Django/contrib/admin/options.py" in wrapper
  226.                 return self.admin_site.admin_view(view)(*args,
**kwargs) File "/usr/lib/python2.6/dist-packages/Django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/Django/contrib/admin/sites.py" in inner
  186.             return view(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/Django/db/transaction.py" in _commit_on_success
  240.                 res = func(*args, **kw) File "/usr/lib/python2.6/dist-packages/Django/contrib/admin/options.py" in add_view
  734.                 self.save_model(request, new_object, form, change=False) File "/usr/lib/python2.6/dist-packages/Django/contrib/admin/options.py" in save_model
  557.         obj.save() File "/usr/lib/python2.6/dist-packages/Django/db/models/base.py" in save
  410.         self.save_base(force_insert=force_insert, force_update=force_update) File "/usr/lib/python2.6/dist-packages/Django/db/models/base.py" in save_base
  483.                     values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields if not isinstance(f, AutoField)] File "/usr/lib/python2.6/dist-packages/Django/db/models/fields/files.py" in pre_save
  252.             file.save(file.name, file, save=False) File "/var/www/Django_projects/gang/../gang/products/thumbs.py" in save
  84.         super(ImageWithThumbsFieldFile, self).save(name, content, save) File "/usr/lib/python2.6/dist-packages/Django/db/models/fields/files.py" in save
  91.         self.name = self.storage.save(name, content) File "/usr/lib/python2.6/dist-packages/Django/core/files/storage.py" in save
  47.         name = self._save(name, content) File "/usr/lib/python2.6/dist-packages/Django/core/files/storage.py" in _save
  146.             os.makedirs(directory) File "/usr/lib/python2.6/os.py" in makedirs
  150.             makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
  150.             makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
  150.             makedirs(head, mode) File "/usr/lib/python2.6/os.py" in makedirs
  157.     mkdir(name, mode)

Exception Type: OSError at /admin/products/photo/add/ Exception Value: (13, 'Permission denied')

FCGIデーモンが実行されているユーザーは、確実にそのディレクトリの読み取りと書き込みのアクセス権を持っています。

Settings.pyから

MEDIA_ROOT = '/var/www/sites/gang/http/media/'
MEDIA_ROOT_URL = '/media/'
25
ismail

/で始まるパスの各ディレクトリの権限を確認してください。ちょっとした考え。

9
Peter Rowell

私はこの同じ問題に遭遇しました。そして、サーバーとしてApacheを使用してホストしている場合の解決策を見つけました。たとえば、私の設定が:

MEDIA_ROOT = '/ var/www/media/geekingreen'

次に、そのフォルダに正しいアクセス許可を再帰的に与えて、すべてのサブフォルダにも同じアクセス許可があることを確認する必要があります。 Apacheのデフォルトグループはwww-dataなので、my Django appに許可を与えるには、これらのコマンドを実行します。

cd /var/www/media
chgrp -R www-data geekingreen/
chmod -R g+w geekingreen/

chgrp -R www-data geekingreen /コマンドは、ディレクトリgeekingreenおよびすべてのサブディレクトリをグループwww-dataに変更します。
chmod -R g + w geekingreen /コマンドは、www-dataに属しているこれらのすべてのフォルダーに対するグループの権限を変更し、書き込み権限を付与します。アップロードには明らかに必要です。

これが同様の問題を抱えていた可能性のあるすべての人に役立つことを願っています。

68
geekingreen

開発サーバーを実行しているときにこれに遭遇した場合に備えて。このようにrootとして開発サーバーを実行しました:Sudo python manage.py runserver 0.0.0.0:80同じLANネットワーク内のiPadでサイトをテストするため。そのセッションで生成されたキャッシュファイルはルートに属していました。そのため、rootとしてではなく翌日にプロジェクトを実行したときに、アクセス拒否エラーが発生しました。

3
Moritz
mkdir(name, mode)

Exception Type: OSError at /admin/products/photo/add/

しかし、あなたのアプリケーションは

/var/www/Django_projects/gangr/../gangr/

「admin/products/photo/add /」のような相対パスではなく、絶対パス「/ admin/products/photo/add /」に設定されたディレクトリパスがありますか?

Settings.pyファイルのMEDIA_ROOTとMEDIA_URLを確認してください。

http://docs.djangoproject.com/en/dev/ref/settings/#media-root

2
John Mee