2016-09-16 13 views
2

Djangoが起動し、すべてのアプリケーションで使用するためにメモリ(Redis)に入れたら、mysqlデータベースからリソースを読み込む方法を教えてください。Djangoが起動時にリソースを読み込みます

私はこの[https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.ready]

class MyAppConfig(AppConfig): 
     def ready(self): 

を見てきました。しかし、彼らは準備ができて関数内のDB接続を使用しない言及します。私のウェブサイトが始まったときにどうすればいいのですか?

また、準備の中でキャッシュ値を設定することはできますか?

from django.core.cache import cache 
cache.set() 

答えて

1

あなただけのRedisにロードするのではなくメモリに保持し、あなたのウェブサイト内のすべてのアプリケーションによって共有されているモデルのインスタンスを作成しているので、おそらく最良の方法は、custom management commandを使用することです。これは、

あなたはDjangoのプロジェクトを設定していると仮定すると、設定ファイルがメインという名前のアプリである:

第2の解決策は、元の文書にe4c5で掲載され、ジャンゴCLIを作成することです上記

python main/cli.py 
として実行することができ

あなたのコードを初期化する方法
import os, sys 

# Setup environ 
sys.path.append(os.getcwd()) 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings") 

# Setup django 
import django 
django.setup() 

# rest of your imports go here 

from main.models import MyModel 

# normal python code that makes use of Django models go here 

for obj in MyModel.objects.all(): 
    print obj 

です

Redisを使用しているので、memcacheにも物事を保存する必要がありますか?しかし、それが必要な場合は、CLIから行うこともできます。

+0

アプリケーションコンテキストに値を格納する方法はありますか。また、すべてのユーザーがアクセスできます。 ?たとえ私たちがApacheにデプロイすると、wsgiインスタンスが再起動することがあります。だから私は、すべてのユーザーのために頻繁にリアルタイムのデータを変更するためにmemcaheに保存する必要があると思います。 –

+0

コマンド/ CLIを別に実行する必要がありますか?どのようにして1つのWebプロジェクトにすべてを統合し、Apacheの起動時に開始できますか? –

+0

これは、Apacheの再起動にはまったく関係ないという点があります。アイテムをキャッシュから期限切れにしている場合は、アイテムが変更されたコード内のどこからでも実行し、Apacheの再起動を待つ必要はありません。 – e4c5

関連する問題