===============================================
他のWebアプリケーションフレームワークを使用する
===============================================
ここまではWindows AzureのPythonパッケージとして公式に提供されている
Djangoを使用したアプリケーション開発について説明してきましたが、
Djangoに限らず、WSGIに対応する他のWebアプリケーションフレームワークも
使用することができます。以下では `Flask`_ と `Pyramid`_ を例に、その方法を説明します。
.. _Flask: http://flask.pocoo.org/
.. _Pyramid: http://www.pylonsproject.org/
Flaskアプリケーションのデプロイ
===============================
まず始めに、Flaskアプリケーションのデプロイ方法について説明します。
クラウドサービスプロジェクトの作成
----------------------------------
まず :doc:`create_project` と同様の方法で、Windows Azure PowerShellから
クラウドサービスプロジェクトとそれに含めるDjango Webロールを作成します。
コマンドの実行によりWebロールフォルダの中に出力されるDjangoプロジェクトは不要ですので削除のうえ、
同じ名前で空のフォルダを作成してください。またPYTHONPATH上にDjangoが見つからない場合は
``Add-AzureDjangoWebRole`` コマンドがエラー終了しますが、この場合も、出力されたWebロールフォルダの中に
同じ名前で空のフォルダを作成してください。
セットアップ設定ファイルの編集
------------------------------
デフォルトのデプロイ処理でDjangoのインストールが行われることを説明しましたが、
他のWebアプリケーションフレームワークを使用する場合はDjangoは不要となりますので、
インストールの対象からDjangoを除外します。 ``Webロール/bin/AzureSetup.cfg`` を開き、
webpi_installプロパティ値の中にある「Django」の部分を、以下のように「 **Python27,PyPI** 」に変更します。
.. code-block:: properties
webpi_install=https://www.microsoft.com/web/webpi/4.0/toolsproductlist.xml;Python27,PyPI
FastCGIモジュールの更新
-----------------------
`PTVSのダウンロードページ`_ より、ダウンロードリストの中にあるファイル ``wfastcgi.py`` をダウンロードし、
``Webロール/bin`` に上書きコピーします。
.. _PTVSのダウンロードページ: http://pytools.codeplex.com/releases
アプリケーションの作成
----------------------
前段の手順で作成したWebロールフォルダ内の空フォルダの中にアプリケーションを作成します。
ここではFlaskのトップページにある単純なHello Worldアプリケーションを例として用います。
新しいファイル ``hello.py`` を以下の内容で作成して、Djangoプロジェクトのコンテンツが出力されていた
フォルダの中に保存してください。
.. code-block:: py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
web.configファイルの編集
------------------------
次に、Webロールフォルダ内にあるファイル ``web.config`` を編集します。
appSettings要素内に、key属性値「WSGI_HANDLER」、value属性値「hello.app」を持つadd要素を追加します。
.. code-block:: xml
同じフォルダ内にあるファイル ``web.cloud.config`` についても編集します。
configurationの子要素に当たるappSettings要素、および、key属性値「WSGI_HANDLER」、
value属性値「hello.app」を持つadd子要素を追加します。
.. code-block:: xml
デプロイ処理の追加
------------------
:doc:`install_python_packages` の内容に従い、クラウドサービスのインスタンス上で
Flaskをインストールするためのスタートアップタスクを追加します。追加する
バッチファイルの処理内容は以下のようになります。
.. code-block:: bat
@echo off
if "%EMULATED%"=="true" goto :EOF
%SystemDrive%\Python27\Scripts\pip install flask
以上で必要な設定は完了ですので、Windows Azure PowerShellでパッケージを作成して
デプロイを実行します。正しくデプロイされていれば以下のようにFlaskの動作を確認できるはずです。
.. image:: images/setup_other_wsgi_framework/201.png
:width: 445
:height: 312
Pyramidアプリケーションのデプロイ
=================================
Pyramidについても基本的な手順はFlaskの場合と同様です。ローカルコンピュータのPython環境に
Pyramidをインストールし、Flaskの場合の手順と同様にクラウドサービスプロジェクトの作成、
セットアップ設定ファイルの編集、FastCGIモジュールの更新を実施のうえ、以下の手順に進んでください。
アプリケーションの作成
----------------------
コンテンツを削除したDjangoプロジェクトフォルダ内にアプリケーションを作成します。
以下ではPyramidのstarterアプリケーションを例として用います。
まずWebロールフォルダ内で以下のコマンドを入力してアプリケーションを作成します。
ここでは作成するアプリケーションの名前をmyappとします。
.. code-block:: console
> pcreate -s starter myapp
さらに、新しいファイル ``wsgi.py`` を以下の内容でWebロールフォルダの下に作成します。
.. code-block:: py
import os
from pyramid.paster import get_app
config = os.path.abspath(os.path.join(os.path.dirname(__file__),
'production.ini'))
application = get_app(config, 'main')
web.configファイルの編集
------------------------
次に、Webロールフォルダ内にあるファイル ``web.config`` を編集します。
appSettings要素内に、key属性値「WSGI_HANDLER」、value属性値「wsgi.application」を持つadd要素を追加します。
.. code-block:: xml
同じフォルダ内にあるファイル ``web.cloud.config`` についても編集します。
configurationの子要素に当たるappSettings要素、および、key属性値「WSGI_HANDLER」、
value属性値「wsgi.application」を持つadd子要素を追加します。
.. code-block:: xml
また :doc:`serve_static_files` で述べた通り、アプリケーションに含まれる静的ファイルを
IISから供給するため、作成されたPyramidアプリケーションの ``static`` フォルダの中にも以下の内容で
``web.config`` ファイルを追加します。
.. code-block:: xml
デプロイ処理の追加
------------------
:doc:`install_python_packages` の内容に従い、クラウドサービスのインスタンス上で
Flaskをインストールするためのスタートアップタスクを追加します。追加する
バッチファイルの処理内容は以下のようになります。
.. code-block:: bat
@echo off
if "%EMULATED%"=="true" goto :EOF
%SystemDrive%\Python27\Scripts\easy_install -Z pyramid
cd %~dp0..\myapp
%SystemDrive%\Python27\python setup.py install
以上で必要な設定は完了ですので、Windows Azure PowerShellでパッケージを作成して
デプロイを実行します。正しくデプロイされていれば以下のようにPyramidの動作を確認できるはずです。
.. image:: images/setup_other_wsgi_framework/202.png
:width: 445
:height: 312
Windows Azure SQL データベースの使用
====================================
:doc:`setup_sql_database` ではSQL Serverドライバとpyodbcを用いて、
Djangoアプリケーションから Windows Azure SQL データベースを使用する方法について
説明しましたが、上記のWebアプリケーションフレームワークからは、
Pythonアプリケーションではお馴染みのO/Rマッパーである `SQLAlchemy`_ を利用できます。
.. _SQLAlchemy: http://www.sqlalchemy.org
この場合まず ``Webロール/bin/AzureSetup.cfg`` を開き、webpi_installプロパティ値に
「 **,SQLNativeClient** 」の記述を追加します。
.. code-block:: properties
webpi_install=https://www.microsoft.com/web/webpi/4.0/toolsproductlist.xml;Python27,PyPI,SQLNativeClient
またスタートアップタスクに追加するバッチファイル内にも、pyodbcとSQLAlchemyのインストールコマンドを追記します。
.. code-block:: bat
%SystemDrive%\Python27\Scripts\easy_install -Z pyodbc
%SystemDrive%\Python27\Scripts\pip install sqlalchemy
.. note::
このときSQLAlchemyのスピードアップ用C言語拡張はコンパイルされませんので、
必要な場合は、インスタンス上でのダウンロードによるインストールではなく、
VSを導入したローカルコンピュータ上で予めC言語拡張をコンパイルし、
アプリケーションパッケージに含めたうえでデプロイしてください。
SQL Serverドライバ+pyodbc+SQLAlchemyを使用してアプリケーションからWindows Azure SQL データベースに
接続する場合のデータベースURLは以下のようになります。
::
mssql+pyodbc://ログインID@サーバ名:パスワード@サーバ名.database.windows.net/データベース名?driver=SQL Server Native Client 11.0
以下は、Pyramidのalchemyアプリケーションをクラウドサービスにデプロイし、
デバッグツールバーを有効化してWindows Azure SQL データベースに対する
SQLAlchemyの実行ログを表示した様子です。
.. image:: images/setup_other_wsgi_framework/205.png
:width: 445
:height: 312
.. note::
alchemyアプリケーションの ``models.py`` に記述されているMyModelクラスをSQL データベースで
使用するためには、name属性の修正、具体的には初期状態でTextとなっているデータ型を
String(n)などに変更する必要があります。