=============================================== 他の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)などに変更する必要があります。