関数の出力をキャッシュするためにビーカー キャッシュを使用しています。
フラスコのuwsgiアプリからキャッシュを無効にすると、セロリアプリに反映されず、その逆も同様でした。
さらに調査したところinspect.getsourcefile(func)
、redis に格納するための一意のキーにビーカーが使用されていることがわかりました。
問題は次のとおりです。フラスコのuwsgiアプリでは、関数をロードするパスが次のように表示されます
./myproject/db_api.py
セロリでは次のように表示されます。
/opt/myproject/db_api.py.
inspect.getsourcefile(func)
関数が両方のケースで同じパスを返すことを確認するにはどうすればよいですか?
セロリにパスを ./myporject/db_api.py として設定させるか、フラスコにパスを /opt/myproject/db_api.py としてロードさせることは問題ありません。
Celeryは、/etc/default/celeryd でデーモンとして実行されています。CELERYD_CHDIR='/opt'
私celeryconfig.py
が持っているCELERY_IMPORTS = ('myproject.controllers.celerytasks.cache_invalidate')
Flask は、ubuntu 上の .ini ファイルを使用して uwsig によって実行されており、次の構成が使用されています。
[uwsgi]
module = myproject
callable = app
chdir = /opt