====================== 静的ファイルを供給する ====================== :doc:`install_python_packages` までの内容のアプリケーションを クラウドサービスにデプロイ、またはWindows Azureエミュレータで実行して Django管理サイトにアクセスすると、スタイルシートの適用や画像の表示を伴わない 淡白な画面表示となってしまいます。 .. image:: images/serve_static_files/165.png :width: 445 :height: 312 Djangoアプリケーション作成の経験がある方はご存知の通り、 Django標準の開発サーバではなく実際のWebサーバ上でDjangoアプリケーションを 運用する場合は、アプリケーションで使用される画像やスタイルシート、 JavaScriptなどの静的ファイルを、Webサーバ上の適切なロケーションに まとめて配置しておくことが必要です。以下ではその方法について説明します。 静的ファイルの収集 ================== クラウドサービス上のDjangoアプリケーションから静的ファイルを供給する場合は、 予め静的ファイルの収集を行った状態でアプリケーションをパッケージングして デプロイする必要があります。静的ファイルの収集に関する手順は一般の Djangoアプリケーション開発の場合と同様です。 ここでは、クラウドサービスパッケージ内のDjangoプロジェクトの中に新しいフォルダ ( ``azure-python/mysite/mysite/staitc`` )を作成し、そこに静的ファイルを収集することにします。 .. image:: images/serve_static_files/169.png 上記のフォルダを作成後、Djangoプロジェクト内の ``settings.py`` をエディタで開き、 STATIC_ROOTおよびSTATIC_URLの設定値を以下のように変更してください。 .. code-block:: py # Absolute path to the directory static files should be collected to. # Don't put anything in this directory yourself; store your static files # in apps' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/home/media/media.lawrence.com/static/" import os STATIC_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, 'static') # URL prefix for static files. # Example: "http://media.lawrence.com/static/" STATIC_URL = '/mysite/static/' 次にコマンドプロンプトでDjangoプロジェクトのフォルダに移動して以下のコマンドを入力します。 .. code-block:: console > python manage.py collectstatic コマンドの実行が完了したら、作成した上記のフォルダ内にadminアプリケーションで使用される 各種の静的ファイルが収集されていることを確認してください。 Webサイト設定ファイルの追加 =========================== :doc:`install_python_packages` ではデフォルトのデプロイ処理モジュールの 処理内容について説明しましたが、このモジュールにより行われるFastCGI設定では、 静的ファイルを含む全てのリクエストがDjangoアプリケーションを実行するPythonプロセスに 転送されるように設定されます。ですが静的ファイルのリクエストについてはアプリケーションでは 処理できません。そのため、先の手順で収集された静的ファイルに対するリクエストについては、 Pythonプロセスで処理せずにWebサーバからコンテンツが直接供給されるよう設定し直す必要があります。 Django Webロールに含まれているデフォルトのデプロイ処理モジュールは、 FastCGIを処理するPythonプロセスを実行するための「Python_via_FastCGI」という名前の リクエストハンドラをIISに登録し、そのハンドラで全てのリクエストを処理するように 設定を行います。また、Django Webロールのフォルダに予め含まれているIISのWebサイト設定ファイルでも、 「Django FastCGI」という名前で同様のリクエストハンドラが設定されるように記述されています。 そこで、先に作成した静的ファイル収集用のフォルダ内のコンテンツについては、 上述のリクエストハンドラを使用せずに処理するよう、IISのWebサイト設定ファイルを記述します。 静的ファイル収集先として作成した ``static`` フォルダの中に ``web.config`` という名前のファイルを作成し、 その内容を以下のように記述してください。 .. code-block:: xml これにより、静的ファイルが収集されたフォルダ内のコンテンツについては、FastCGIのPythonプロセスではなく、 IISが通常の静的ファイル供給で使用するリクエストハンドラにより処理されるようになります。 この状態でWindows Azureエミュレータを起動、またはパッケージを再作成のうえ クラウドサービスにデプロイしてDjango管理サイトにアクセスすると、 静的ファイルも適切に供給されている状態の外観となっているはずです。 .. image:: images/serve_static_files/170.png :width: 445 :height: 312 なお静的ファイルの供給については、クラウドサービスのWebサーバから供給する以外に、 Windows AzureストレージのBLOBコンテナより供給する方法もあります。 ここでの詳細な説明は省略しますが、静的ファイルを含めることでパッケージの容量が 肥大化してしまう、あるいは、CDNを利用して送信速度の向上を図りたい、 などの場合にはこちらの方法が有効です。