0

ユーザーがファイルをアップロードできるようにするDjangoで構築された Web サイトがあります。次に、このファイルが処理され、他のファイルが多数作成されます。これらのファイルは、私のアカウントがメンバーであるユーザー/グループwww-dataによって所有されています。他の誰かがこれらのファイルを作成するスクリプトを作成し、残念ながら私がよく知らないプログラムを使用しています。これらのファイルには rw-r--r-- 権限があり、Web サイトからだけでなく手動でも削除できます。

次に、Web サイトは「 collectstatic 」 Django コマンドを呼び出し、これらのファイル (www-data が所有) を static_root ディレクトリにコピーします。これらのファイルを手動で削除することも、Web サイトでスクリプトを呼び出して削除することもできません。「権限が拒否されました」というエラーが表示されます。もともとこれらのファイルには、コピー元のファイルと同じパーミッション (rw-r--r--) がありましたが、django StaticFilesStorage オブジェクトを次のように拡張することで、rw-rw-rw を持つように管理しました。

from django.contrib.staticfiles.storage import StaticFilesStorage
import os

class MyStaticFilesStorage(StaticFilesStorage):        
    def save(self, name, content):
        os.umask(0)
        super(MyStaticFilesStorage, self).save(name, content)

私はこの夏、Django と Python を使い始めたばかりなので、あまり詳しくありません。どんな助けでも大歓迎です。自分がメンバーになっているグループに対して「書き込み」権限を持つファイルを削除できない理由がわかりません。


編集:

問題はどこにあると思いますか: ファイルを作成するプログラムは、drwxrwxrwx パーミッションを持つファイル用のディレクトリを作成します。「collectstatic 」は、このディレクトリを私の static_root ディレクトリにコピーし、その新しいディレクトリのパーミッションは drwxr-xr-x です。

4

2 に答える 2

0

collectstaticandを使用FILE_UPLOAD_PERMISSIONSしますFILE_UPLOAD_DIRECTORY_PERMISSIONS(後者は Django 1.7 で新しく追加されました)。

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstaticを参照してください。

于 2014-05-29T18:07:40.877 に答える
0

UNIX ライクな環境でファイルを削除するには、ファイル自体ではなく、ディレクトリに対する書き込み権限が必要です。

したがって、静的ファイルが配置されているディレクトリを chmod 775 してみてください。動作するはずです。

ところで:上記の方法で StaticFilesStorage にパッチを適用することは、良い解決策ではなく、とにかく必要とされるべきではありません。

于 2013-09-10T11:10:38.303 に答える