概要

Google App Engineで稼働する。主プログラミング言語はPython 2.7

リポジトリ:
https://github.com/mindia/timecard-gae

デプロイ:
https://timecard-gae.appspot.com/

API:
API explorer: https://timecard-gae.appspot.com/_ah/api/explorer
Google APIs Explorerに表示される「timecard API」で仕様を閲覧・確認します。開発に利用したい方は client_id を登録するのでご連絡ください。
Google Cloud Endpointsの実態はJSON-RPC2です。メッセージプロトコルはprotorpcです。JavaScript, Android, iOSのクライアントライブラリは自動生成されます。

コーディング規約

Python: PEP8準拠。インデントはスペース2つ
APIはGoogle Cloud Endpointsベース
Google App Engineのベースライブラリとしてgae-tapを利用: https://github.com/MiCHiLU/gae-tap

model設計

Google App Engineのdatastoreの特性上、key valueストアとして扱わないとパフォーマンスが出ません(=お金がかかります)。
key部分は複合機キーにし、変更可能なレコードとインデクスレコードのみ、通常のレコードとします。
model_mixinにmodel属性としてアクセスできるmethodを書きます。


既知の問題

Google Cloud EndpointsのHTTP response bodyのpadding処理

Google App Engine / Python SDKに含まれるendpoints-1.0には、HTTP response bodyのpadding処理に問題があり、testが通りません。
この問題を回避するには、
https://code.google.com/p/googleappengine/issue...
にあるpatchを、Google App Engine / Python SDKに含まれるendpoints-1.0に当ててください。

$ cd $GAE_HOME/lib/endpoints-1.0/endpoints
$ patch -p0 -i patch.diff

Google App Engine Python SDK 1.9.1

google.appengine.toolsに含まれるdev_appserverがold_dev_appserverへ変更になりました。
>       from google.appengine.tools import dev_appserver
E       ImportError: cannot import name dev_appserver
test実行時に上記エラーが出る場合は、最新版のpytest_gaeにupdateしてください。
(timecard-gae)$ pip install --upgrade https://bitbucket.org/MiCHiLU/pytest_gae/get/default.zip

ディレクトリ構成の解説

リポジトリに含まれるディレクトリ/ファイル

  • doc
    • sphinx形式のドキュメント
  • gae / Google App Engine / Python のプロジェクトルート
    • locales
      • I18N関連
    • main_api
      • Google Cloud Endpoints実装
    • oauth_config
      • OAuth2設定ファイル
    • site-packages
      • Pythonパッケージ関連
    • static
      • 静的ファイル
    • static_root
      • マルチテナント対応静的ファイル。robots.txtなど
    • tap
      • gae-tapライブラリ
    • templates
      • Jinja2形式のテンプレートファイル。hamlで書く
    • tests
      • Python / JavaScriptのテスト
    • api.py
      • Google Cloud Endpointsのエントリーポイント
    • app.yaml
      • Google App Engine / Pythonの設定ファイル
    • appengine_config.py
      • Pythonアプリケーションの設定ファイル
    • cron.yaml
      • Google App Engineのcron設定ファイル
    • index.yaml
      • Google App EngineのDatastoreインデックス設定ファイル
    • queue.yaml
      • Google App EngineのTaskQueue設定ファイル
  • .gitignore
    • git関連のファイル
  • .watchlion.yaml
  • Gemfile
    • gem関連のファイル
  • Makefile
    • 操作用makeファイル
  • README.md
    • gitリポジトリ用のインデックスファイル
  • package.json
    • Nodeパッケージ関連のファイル
  • packages-gae.txt
    • Pythonパッケージ関連のファイル(プロダクション用)
  • packages-tap-develop.txt
  • packages.txt
    • Pythonパッケージ関連のファイル(開発用)

makeすると生成されるディレクトリ/ファイル

  • datastore.db
    • Google App Engine 開発用サーバのデータベースファイル
  • htmlcov
    • Pythonコードのカバレッジを出力
  • node_modules
    • node関連ファイル
  • gae / Google App Engine / Python のプロジェクトルート
    • static_root.zip
      • マルチテナント対応静的ファイルをデプロイ用にzipで固めたもの

開発環境の構築

リポジトリをcheckoutする

$ git clone https://github.com/MiCHiLU/timecard-gae.git
$ cd timecard-gae

Google App Engine SDK for Pythonをインストールする

gemパッケージをインストールする

$ bundle install

Nodeパッケージをインストールする

$ npm install

Python仮想環境を作成する

$ mkvirtualenv --python=`which ptyhon2.7` timecard-gae

作成したPython仮想環境へPythonパッケージをインストールする

$ workon timecard-gae
(timecard-gae)$ pip install -r packages.txt
(timecard-gae)$ pip install -r packages-gae.txt
(timecard-gae)$ はPython仮想環境が有効になっていることを示すプロンプトです。

Python開発環境について

Python開発環境に関する詳細は次のサイトを参照してください。

Docker imageの配布について


Docker imageを取得できます。
$ docker pull michilu/fedora-timecard-gae
起動したdockerコンテナ内で、例えば次のように操作してみてください。
$ cd /timecard-gae
$ make test

テスト

(timecard-gae)$ make test

CI


CIの状況を確認するには確認するには、次のURLを参照してください。

Google App Engine / Pythonの開発サーバーを起動する

(timecard-gae)$ make runserver

Google App Engineへデプロイする

(timecard-gae)$ make deploy

開発時のTips

watchlion

(timecard-gae)$ watchlion
を実行すると、haml, coffeeなどのファイルの追加/更新を検知して自動ビルドします。
watchlionの設定は .watchlion.yaml に記述します。

Related Contribution


Projects


Fixes

2