Google App Engin SDK で開発サーバーが起動しない場合の解決法

臨時プログラミング勉強会@渋谷ルノアールです。

前回のエントリーで、Google App Engin SDKをインストールしたものの、開発サーバーが起動しなかった件について、ようやく解決したので記載しておきます。

いくつかの要因がありますが、まず素人がプログラミングする際にどうしても壁となりやすい下記の条件が不幸なことに重なってしまってました。

1.インストールしたGoogle App Engine(以下GAE)のバージョンが最新のものだが、参考にしていた本に記載されているのは古いバージョンであったこと
2.本で記載してあるPythonのバージョンが古く、自分が学習しているPythonのバージョンとは違っていたこと
3.自分がこれまで学習していたPythonのバージョンが2.6のもので、GAEではPythonのバージョン2.5までしかサポートしていなかったこと

3つのポイントそれぞれでズレが生じており、どれかに1本化する必要がありました。当然のことながら、GAEで動かすことがゴールですから、GAEのルールに合わせることにします。

まず、Python2.6.2(※自分が使ってたもの)をアンインストールして、Python2.5.4をインストールしました。(インストールはコチラ:http://python.org/download)

インストール後、システムのプロパティより環境変数の編集をします。編数名のPathの後ろに次のように記述します。

;C:\Python25;C:Python25\Scripts

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

とりあえず自分は、Cドライブ直下に、テスト用のディレクトリを作りました。

C:\test_log

上記のディレクトリの中に、app.yamlファイルを置きます。GAEのチュートリアルでサンプルがあるのでそれを利用しつつ、若干書き換えます。
http://code.google.com/intl/ja/appengine/docs/python/config/appconfig.html

application: test-log
version: 1
runtime: python
api_version: 1

handlers:
- url: /styles
  static_dir: styles

- url: .*
  script: main.py

続いて、PythonHello Worldと出す命令文を書きます。test.pyとでも名前を付けて、C:\test_log_logに保存します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template

class IndexHtml(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__),'index.html')
        template_values = {}
        template_values['messeage'] = 'Hello, world!'
        self.response.out.write(template.render(path,template_values))

def main():
    application = webapp.WSGIApplication([('/', IndexHtml)], debug=True)
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()

続いては、C:\test_log_log内にindex.htmlを用意。Hello,World!を出すだけなので適当で大丈夫です。こんな感じ。。

<html>
<head>
<title>テストログ</title>
</head>
<body>

<div id="head">
<a href="/">テスト中</a>
</div>

<div id="content">
<p>{{ messeage }}</p>
</div>
 
</body>
</html>

あとは、作成したものを開発サーバーで実行します。コマンドプロンプトを起動し、下記のコマンドを入力してください。

使用するコマンド
cd \ (第1階層まで戻ります)
cd.. (いまの階層よりも1つ階層が戻ります)
cd ディレクトリ名 (指定したディレクトリへ進んでいきます)

上記のコマンドを使いながら、google_appengineの階層まで進んでください。一気に階層は進めません。cdコマンドで1ずつ階層を進んでください。そこまで進めば、>以降のコマンドは一気に書いて実行です。

C:\Program Files\Google\google_appengine>python dev_appserver.py \test_log

そうすると、コマンドプロンプトに次々とメッセージがでるはず。y/nを尋ねられるので、そこはyを選択してください。

Running application test_log on port 8080: http://localhost:8080

と表示されたらOK。あとはhttp://localhost:8080にアクセスして、HTMLにHello,Worldが出ていたら成功です。

ここに来るまで、丸1日かかってしまいましたが、解決方法を自分で考えてチャレンジしてみることは、いい経験だったのではないかと思います。