Kay には manage.py という管理用のスクリプトが付いています。このスクリプトで、アプリケーション管理タスクの大部分をカバーできます。パラメーター無しで呼出せばヘルプを見る事ができます。
タスクの一部は、Google App Engine SDK が提供するコマンドを実行しますが、実行の際にパラメータの調整や、事前準備を行います。
ですので、GAE 附属のスクリプト( appcfg.py や dev_appserver.py または bulkloader.py )をそのまま使用する事はなるべく避けてください。
指定したアプリケーションに新しい言語カタログを追加します。
$ python manage.py add_translations [options]
このサブコマンドは 素のGAE で appcfg.py にて行うタスクを実行するためのものです。appcfg サブコマンドの使用方法は下記のとおりです:
$ python manage.py appcfg [options] <action>
action は下記のどれかである必要があります:
- cron_info: cron ジョブの情報を表示します。
- download_data: データストアからデータをダウンロードします。
- help: あるアクションのヘルプを表示します。
- request_logs: Apache の common log フォーマットでログを書き出します。
- rollback: 実行途中のアップデートをロールバックします。
- update: アプリケーションをアップロードします。
- update_cron: アプリケーションの cron 設定を更新します。
- update_indexes: アプリケーションの index を更新します。
- update_queues: アプリケーションのタスクキュー設定を更新します。
- upload_data: データストアにデータをアップロードします。
- vacuum_indexes: アプリケーションで使用しない index を削除します。
help アクションに続いてアクション名を指定する事で、特定のアクションに対するヘルプを表示できます。例えば、下記のように実行すれば update アクションのヘルプが得られます:
$ python manage.py appcfg help update
Kay は引数にカレントディレクトリを自動的に補完します。ですので、各アクションのヘルプにあるようにアプリケーションディレクトリを指定する必要はありません(この動作はちょっと紛らわしいので将来は修正されるかもしれません)。例えばアプリケーションをアップロードするには下記のコマンドでオッケイです:
$ python manage.py appcfg update
現バージョンの Kay は、GAE のサーバ上では事前パースされた jinja2 テンプレートのみ読み込みますので、デプロイの前にテンプレートの事前パースが必要です。manage.py スクリプトは自動的に事前パースを行いますので、普段ユーザーはこの事を気にする必要はありません。もし、MacOSX のランチャーを使っている場合には deploy ボタンを押すだけでは jinja2 テンプレートの事前パースは行われません。このような場合は、 manage.py preparse_apps のようにすればテンプレートの事前パースを行う事ができます。
適切なパラメータを指定して、バルクローダ・スクリプトを実行します。
$ python manage.py bulkloader [option]
リモートAPIを使用して、App Engine上のデータを全て消去します。
$ python manage.py clear_datastore
参考
アプリケーションの全ての国際化カタログをコンパイルします。
$ python manage.py compile_translations
リモートAPIを使用して、ユーザを新規作成します。
$ python manage.py create_user
すべてのデータをサーバからダンプします。
参考
国際化対象のメッセージを抽出して、potファイルを生成します。
$ python manage.py extract_messages [options]
このコマンドは、 settings.INSTALLED_APPS の設定値に基いて、全ての jinja2 テンプレートを事前パースします。manage.py を使用してアプリケーションをアップロードする時、自動的にこの処理が行われるので、普段は実行する必要はありません。
$ python manage.py preparse_apps
Kay自身の Jinja2 テンプレートを事前パースします。Kayの開発者が使用するコマンドです。
$ python manage.py preparse_bundle
すべてのデータをサーバにリストアします。
$ python manage.py restore_all [options]
参考
運用サーバのデータストアにアクセスする対話型のシェルを起動します。
$ python manage.py rshell [options]
適切なパラメータを指定して、dev_appserverを起動します。
$ python manage.py runserver [options]
Pythonの対話型プロンプトを起動します。
$ python manage.py shell [options]
新しいプロジェクトを作成します。
$ python manage.py startproject myproject
インストールされたアプリケーションのテストを実行します。
$ python manage.py test [options]
メッセージの出力レベルを整数で指定します。デフォルト値は 0 です。
potファイルで翻訳ファイルを更新します。
$ python manage.py update_translations [options]
アプリケーションディレクトリ内に management モジュールを置き、その 中に action_ で始まる関数(例: action_foo, action_bar)を定義すること で、独自の管理スクリプトを追加できます。関数の後半部分が manage.py から使用するサブコマンドの名前になります。例えば action_foo を追加 したなら、この関数を python manage.py foo で呼出せます。
foo サブコマンドをプロジェクトに追加する簡単な例を見てみましょう。
myapp/management.py
def action_foo(foo_arg=("f", ""), use_bar=True):
print"foo_arg: %s" % foo_arg
print"use_bar: %s" % use_bar
この例で foo_arg はシェル上で --foo-arg <値> とするか -f <値 > とする事で指定できます。 use_bar の値はデフォルトで True ですが False で上書きするには --no-use-bar と指定します。
この管理スクリプトの仕組みは werkzeug の機能をベースにしています。です ので werkzeug documentation を参照す るとより深く動きを理解する事ができるでしょう。
これは開発サーバー及び本番サーバーのデータストアにアクセスするための 管理スクリプトを作成するためのヘルパー関数です。
| パラメタ: |
|
|---|
簡単な例を見てみましょう。
myapp/management.py:
# -*- coding: utf-8 -*-
from google.appengine.ext import db
from kay.management.utils import (
print_status, create_db_manage_script
)
from myapp.models import Prefecture
prefectures = {
1: u'Hokkaido',
2: u'Aomori',
3: u'Iwate',
# ..
# ..
}
def create_prefectures():
entities = []
for idnum, name in prefectures.iteritems():
entities.append(
Prefecture(name=name,
key=db.Key.from_path(Prefecture.kind(), idnum)))
db.put(entities)
print_status("Created prefectures.")
def delete_prefectures():
db.delete(Prefecture.all().fetch(100))
print_status("Deleted prefectures.")
action_create_prefectures = create_db_manage_script(
main_func=create_prefectures, clean_func=delete_prefectures,
description="Create Prefectures")
このサブコマンドは python manage.py create_prefectures で実行できま す。有効なパラメーターは下記の通りです。
$ python manage.py create_prefectures
下記のようにすれば、このサブコマンドを開発サーバーに対して実行する事が できます。
$ python manage.py create_prefectures -h localhost:8080 --no-secure