Django:Conflict Between Live&同じサーバー上のサイトのステージング
-
06-07-2019 - |
質問
最近、Djangoアプリを公開しました。サーバー上のステージングサブドメインにアプリを構築しました。ライブに行ったとき、ステージングサブドメインのファイルをメインサイトにコピーし、ステージングデータベースを作成し、古いステージングサイトを新しいステージングデータベースに向けました(新しいライブサイトは元のデータベースに向けたままにします)。これはApacheのmod_pythonにあります。
両方のサイトに固有のSESSION_COOKIE_NAME設定を作成し、SESSION_COOKIE_DOMAINを" .sitename.com"に設定しました。ライブサイトの場合、ステージングサイトの場合はなし。
私たちが見ている問題は、ライブ管理者のユーザーがステージングサイトに保存されている(表示される)編集を行っていることです。ユーザーは管理サイトから「ランダムに」ログアウトしています。リクエスト中。
ここで明らかに間違っていることはありますか? SESSION_COOKIE_DOMAINは" www.sitename.com"である必要があります。サブドメインが" staging.sitename.com"にあるため、それを制限するには?現在のライブデータベースに古いセッション情報を残しましたか(この問題が発生する前に、。/ manage.py cleanを実行し、ライブデータベースからすべてのセッションを削除しました)?
ありがとう
解決
ここ数週間でこの問題に遭遇しました。これが重複する可能性のある場所がいくつかありました。
1)別のPythonインタープリターを実行していますか? スレッドが互いに踏まないようにmod_pythonを構成する方法はいくつかあります。ここでの重要なポイントは、個別のServerName(この場合、ドメイン staging.sitename.com および www.sitename.com )を提供することと、個別のApache vhosts構成ファイルのPythonInterpreter構成設定。
PythonInterpreter mysite
2)同じポートでキャッシュバックエンドを実行していますか settings.pyには、ステージングコンテンツとライブコンテンツを区別するために、キャッシュされたコンテンツに複数の文字をプレフィックスとして付加できる構成があります。これは、settings.pyの次の構成で実装されます。
CACHE_MIDDLEWARE_KEY_PREFIX = "STG_"
別のオプションとして、問題が解決するかどうかを確認するために、別のファイルシステムキャッシュでしばらく実行することもできます。 settings.pyで、追加してみてください
CACHE_BACKEND = 'file:///var/tmp/django_cache'
3)すべての.pycファイルを削除しようとしましたか? 奇妙なことに、上記の2つのソリューションで問題を解決できなかった場合、bashコマンドを実行して、サーバーが停止している間にコンパイル済みのpythonファイル(.pycファイル)をすべて削除しました。
find ./ -type f -name "*.pyc" -exec rm -f {} \;
これは、デプロイメントの変更が何らかの理由で再コンパイルされなかったことを示します。
これがお役に立てば幸いです!