問題タブ [django-cache-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
13004 参照

python - 属性がdjangoの「DeferredAttribute」であるかどうかを判断します

コンテキスト


Django 1.4 から 1.7 にアップグレードした後、Django Cache Machine の無効化ロジックが正気を失うというかなり重大なバグを発見しました。

このバグは、only()キャッシュ マシンの を拡張するモデルでの の呼び出しに限定されていますCachingMixin。その結果、時々スタックを破壊する深い再帰が発生しますが、それ以外の場合は、リレーションシップflush_lists内のモデルの双方向の無効化にキャッシュ マシンが使用する膨大な量が作成されます。ForeignKey


不具合


バグは次の行で発生します ( https://github.com/jbalogh/django-cache-machine/blob/f827f05b195ad3fc1b0111131669471d843d631f/caching/base.py#L253-L254 )。この場合は、遅延属性と未遅延属性が混在selfする のインスタンスです。MyModel

ForeignKeyCache Machine は、関係全体で双方向の無効化を行います。これは、 内のすべてのフィールドをループしModel、問題のオブジェクトが無効化されたときに無効化する必要があるオブジェクトを指す一連のポインターをキャッシュに格納することによって行われます。

Django ORMで を使用するとonly()、フェッチされていない属性を Django のDeferredAttribute実装でオーバーライドするメタ プログラミング マジックが実行されます。通常の状況では、へのアクセスは( https://github.com/django/django/blob/18f3e79b13947de0bda7c985916d5a04e28936dc/django/db/models/query_utils.py#L121-L146favorite_color )を呼び出し、結果キャッシュまたは情報源。これは、問題の の延期されていない表現を取得し、それに対して別のクエリを呼び出すことによって行われます。DeferredAttribute.__get__Modelonly()

これは、外部キーをループしてModelそれらの値にアクセスする場合の問題であり、Cachine Machine は意図しない再帰を導入します。延期された属性に対するは、適用さgetattr(self, f.attname)れた属性と延期された属性を持つ のフェッチを引き起こします。これにより、キャッシング プロセス全体が最初からやり直されます。ModelCachingMixin

質問


これを修正するために PR を開きたいと思います。これに対する答えは、延期された属性をスキップするのと同じくらい簡単だと思いますが、属性にアクセスするとフェッチプロセスが開始されるため、その方法がわかりません。

私が持っているのは、Model延期された属性と延期されていない属性が混在する aのインスタンスのハンドルだけである場合、属性にアクセスDeferredAttribute せずに属性が a であるかどうかを判断する方法はありますか?

0 投票する
2 に答える
859 参照

django - Gunicorn/WSGI WebサーバーでDjangoアプリを実行するには?

既存の Django アプリケーションを MacBook でローカルに実行しています。ディレクトリ構造は次のようになります。

これまで、Django のおもちゃの Web サーバーを使用してアプリを実行してきました: ./manage.py runserver 0.0.0.0:8000. しかし、今は代わりにガニコーンを使いたいと思っています。だから私はここの指示に従っています。

私はそうします source myVirtualenv/bin/activate && cd myproject && gunicorn mySite.wsgi。次のエラーが表示されます。

同じ場所から実行する./manage.py runserver 0.0.0.0:8000と、完全に正常に動作します。

なんで?私は何か間違ったことをしていますか?Django-Cache-Machine は Gunicorn/WSGI では動作しませんか? この問題を回避するにはどうすればよいですか?

0 投票する
1 に答える
409 参照

django - Django カスタム cache_page デコレータは、最初の実行のみでエラーを返します。その後は問題ありません

アプリ用のカスタムcache_pageデコレータを作成しました。最初の実行では機能せず、ミドルウェアに関連するエラーがスローされます。

content_encoding = response.get("Content-Encoding", "")

AttributeError: 'bool' object has no attribute 'get'

ただし、2回目以降の実行では、キャッシュが設定されているため機能します。django debug_toolbar をインストールし、cors ミドルウェアをミドルウェアに追加しました。誰でもこれについて助けることができますか?これが私のカスタムデコレータ関数です: