(1.1.3)の最新バージョンは、django-storages
S3Botoを介したファイル変更の検出を処理します。
pip install django-storages
そして、あなたは今元気です:)オープンソースが大好きです!
更新:S3Botoクラスを使用している場合は、設定ファイルでAWS_PRELOAD_METADATA
オプションをに設定して、同期を非常に高速にします。True
彼のS3を使用する場合は、彼のPreloadedS3クラスを使用してください。
更新2:コマンドの実行はまだ非常に遅いです。
更新3:問題を修正するためにdjango-storagesリポジトリをフォークし、プルリクエストを追加しました。
問題はmodified_time
、フォールバック値が使用されていなくても呼び出されるメソッドにあります。フォールバックをブロックに移動して、リターンがif
あった場合にのみ実行されるようにしましたget
None
entry = self.entries.get(name, self.bucket.get_key(self._encode_name(name)))
する必要があります
entry = self.entries.get(name)
if entry is None:
entry = self.bucket.get_key(self._encode_name(name))
現在、パフォーマンスの違いは、100秒から1000リクエストの場合の<.5秒からです。
アップデート4:
10k以上のファイルを同期する場合、S3は結果をページ分割して5〜10秒の同期時間を発生させるため、botoは複数のリクエストを行う必要があると思います。これは、ファイルが増えるにつれて悪化するだけです。
解決策は、カスタム管理コマンドを使用django-storages
するか、ファイルがS3に保存され、他のすべてのファイルのメタデータを含むファイルを更新することです。このメタデータは、コマンドを介してファイルが更新されるたびに更新されますcollectstatic
。
他の方法でアップロードされたファイルは検出されませんが、唯一のエントリポイントが管理コマンドであるかどうかは関係ありません。