お気に入り | 日本語 | ログイン

Python 開発用サーバー

App Engine Python SDK には、ご使用のコンピュータで実行できるウェブ サーバー アプリケーションが用意されており、App Engine Python ランタイム環境で実行するアプリケーションをシミュレーションできます。シミュレーションを行う環境では、システム機能や Python モジュール インポートの制限など、サンドボックスの制限が一部適用されますが、要求のタイムアウトや割り当てなどの制限はありません。開発用サーバーでは、タスクをローカルで実行することにより、サービスのシミュレーションを行うこともできます。

開発用ウェブ サーバーの実行

アプリケーション用のディレクトリと app.yaml 設定ファイルがあれば、dev_appserver.py コマンドで開発用ウェブ サーバーを開始できます。

dev_appserver.py myapp

デフォルトでは、ウェブ サーバーはポート 8080 でリッスンします。http://localhost:8080/ でアプリケーションにアクセスできます。

ウェブ サーバーで使用するポートを変更するには、--port オプションを使用します。

dev_appserver.py --port=9999 myapp

ウェブ サーバーを停止するには、Windows の場合はコマンド プロンプト ウィンドウで Ctrl+Break キー を押します。Mac OS X または Unix では、Ctrl+C キーを押します。

ウェブ サーバーを実行中は、ファイルに加えられた変更が検出され、必要に応じてファイルがリロードされます。ほとんどの変更は、ファイルを編集してブラウザでウェブページをリロードするだけですが、アプリケーションが動的インポートを行った場合など、特定の状況においては、ウェブ サーバーを再起動してモジュール インポートのキャッシングのリセットが必要な場合があります。

dev_appserver.py を実行する場合は必ず Python 2.5 を使用してください。Python 2.4 でも動作しますが、Python 2.4 と 2.5 には Unicode 文字列の処理などに違いがあり、作成したアプリケーションに影響する場合もあります。

データストアの使用

開発用ウェブ サーバーは、コンピュータのファイルを使用して App Engine データストアをシミュレーションします。このファイルは次回ウェブ サーバーを呼び出すときまで保持されるので、格納したデータを引き続き使用できます。

アプリケーションのローカル データストアをクリアするには、ウェブ サーバーを開始するときに、次のように --clear_datastore オプションを使用します。

dev_appserver.py --clear_datastore myapp

ウェブ サーバーを開始すると、使用しているデータストア ファイルの場所が端末に出力されます。ファイルのコピーを作成して、そのコピーを後で復元してデータストアを既知の状態にリセットできます。データストア ファイルを置き換えたら、ウェブ サーバーを必ず再起動してください。

データストア ファイルに使用する場所を変更するには、次のように --datastore_path オプションを使用します。

dev_appserver.py --datastore_path=/tmp/myapp_datastore myapp

アプリケーションがデータストアでクエリを実行すると、クエリがアプリケーションの index.yaml ファイルでサポートされているかどうか、開発用ウェブ サーバーで確認が行われます。クエリのインデックスが index.yaml ファイルで記述されている必要がある場合、サーバーでインデックスが生成され、ファイルに追加されます。テストで実行していないクエリをアプリケーションで試みる可能性がある場合は、このファイルを編集してください。

データストア ファイルを作成または最後にクリアした後に実行されるすべてのクエリから index.yaml が生成されます。クエリの履歴は、個別のファイルに保存されます。履歴ファイルの場所を変更するには、--datastore_path オプションと類似する --history_path オプションを使用します。

インデックスと index.yaml の詳細については、クエリとインデックスPython データストアのインデックスの設定をご覧ください。

ローカル データストアの SQLite への切り替え

データストアに大量のデータを保存している場合、ローカル データストア スタブのバックエンドを SQLite に切り替えれば、パフォーマンスが向上し、起動時間が短縮されます。

注: SQLite と通常のデータストア バックエンドの切り替えを行うと、ローカル データストアが消去される場合があります。

SQLite に切り替えるには、--use_sqlite オプションを使用します。

dev_appserver.py --use_sqlite

ユーザーの使用

開発用ウェブ サーバーは、独自のログイン ページとログアウト ページで Google アカウントをシミュレートします。開発用ウェブ サーバーで実行中は、users.create_login_url 関数と users.create_logout_url 関数は、ローカル サーバー上の /_ah/login/_ah/logout の URL を返します。

開発用ウェブ サーバーのログイン ページには、メール アドレスを入力するフォームがあります。セッションでは、入力したメール アドレスがアクティブなユーザーとして使用されます。

ログインしたユーザーが管理者であるとアプリケーションに認識させるには、フォームの チェックボックスをオンにします。

メールの使用

開発用ウェブ サーバーでは、App Engine のメール サービスの呼び出しでメールを送信することができます。メール サポートを有効にするには、使用するメール サーバーを指定するオプションをウェブ サーバーに提供する必要があります。ウェブ サーバーは SMTP サーバーを使用することも、ローカルにインストールした Sendmail を使用することもできます。

SMTP サーバーを使用してメール サポートを有効にするには、--smtp_host--smtp_port--smtp_user--smtp_password の各オプションを適切な値で使用します。

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns myapp

Sendmail を使用してメール サポートを有効にするには、--enable_sendmail オプションを使用します。ウェブ サーバーは、sendmail コマンドを使用して、インストール時のデフォルト設定でメール メッセージを送信します。

dev_appserver.py --enable_sendmail myapp

SMTP と Sendmail のどちらでもメールが使用できない場合、アプリケーションからメールを送信しようとしても何も起こりませんが、アプリケーションでは成功したように見えます。

URL フェッチの使用

HTTP 要求を作成するためにアプリケーションで URL Fetch API を使用している場合、開発用ウェブ サーバーはコンピュータから直接要求を作成します。プロキシ サーバー経由でウェブサイトにアクセスしている場合、App Engine でアプリケーションを実行する場合とは動作が異なる場合があります。

注: dev_appserver.py が処理できる要求は、一度に 1 つだけです。要求の処理中にアプリケーション自体に対して URL フェッチ要求を行う場合、開発用ウェブ サーバーを使用していると、これらの URL フェッチ要求は失敗します(App Engine で実行している場合は失敗しません)。このような要求をテストするには、別のポートで 2 つ目の dev_appserver.py インスタンスを実行してから、アプリケーション自体に要求を行う際に別のサーバーを使用するようにアプリケーションをコーディングします。

開発用コンソール

開発用ウェブ サーバーには、コンソール ウェブ アプリケーションが含まれます。コンソールを使用すると、ローカル データストアを参照したり、ウェブ フォームに Python コードを送信してアプリケーションと通信することができます。

コンソールにアクセスするには、ご使用のサーバーの /_ah/admin の URL(例: http://localhost:8080/_ah/admin)にアクセスします。

コマンドライン引数

dev_appserver.py コマンドでは、次のコマンドライン引数がサポートされています。

--datastore_path=...

ローカル データストアのデータ ファイル用に使用するパスです。パスが存在しない場合、サーバーで作成されます。

--history_path=...

ローカル データストアの履歴ファイル用に使用するパスです。サーバーはクエリ履歴ファイルを使用して、index.yaml のエントリを生成します。

--debug

実行中に、詳細なデバッグ メッセージをコンソールに出力します。

--help

参考になるメッセージを表示してから終了します。

--login_url=...

ユーザーのログイン ページ用に使用する相対 URL です。デフォルトは /_ah/login です。

--port=...

サーバー用に使用するポート番号です。デフォルトは 8080 です。

--address=...

サーバー用に使用するホスト アドレスです。ネットワーク上にある別のコンピュータから開発用サーバーにアクセスできるようにするために、この設定が必要になる場合があります。0.0.0.0 のアドレスには、ローカルホスト アクセスとホスト名 アクセスのどちらも使用できます。デフォルトは localhost です。

--clear_datastore

ウェブ サーバーを起動する前に、データストアのデータと履歴ファイルをクリアします。

--require_indexes

index.yaml ファイルのエントリの自動生成を無効にします。代わりに、ファイルでインデックスの定義が必要なクエリをアプリケーションが作成する際にインデックス定義が見つからなかった場合に、例外を送出します。これは App Engine で実行した場合とほぼ同じです。

--smtp_host=...

メール メッセージの送信用に使用する SMTP サーバーのホスト名です。

--smtp_port=...

メール メッセージの送信用に使用する SMTP サーバーのポート番号です。

--smtp_user=...

メール メッセージの送信用に SMTP サーバーで使用するユーザー名です。

--smtp_password=...

メール メッセージの送信用に SMTP サーバーで使用するパスワードです。

--enable_sendmail

メール メッセージの送信に、ローカル コンピュータにインストールされた Sendmail を使用します。

--debug_imports

モジュールのインポートに関連するデバッグ メッセージを出力します。検索パスとエラーが含まれます。