2011年9月8日木曜日

Google App Engine はじめようかな? - Request Header の取得

ここで一つ疑問。

HTTP の Request Body は標準入力から取得できるとのことだけれど、HTTP の Request Header はどうやって取得するのだろう?

複数の python スクリプトに対応させる

その前に、現状 HTTP Request が helloworld.py にしかハンドリングされないので、
/py/(script name) で (script name).py が呼び出されるように app.yaml を変更してみる。

app.yaml
application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /py/(.*)
  script: \1.py

http://localhost:8080/py/helloworld でアクセスして、Hello, World! が表示されたからよいみたい。

疑問の解決に必要な知識

CGI 標準では、HTTP_ で始まる環境変数に設定されているはずなので、HTTP_ で始まる環境変数の内容を表示してみる。

HTTP_ で始まる環境変数を表示する

http_.py
import os

print 'Content-Type: text/plain'
print ''

for key, val in os.environ.iteritems():
    if (key[0:5]=="HTTP_"):
     print  key+": "+val

"http://localhost:8080/py/http_" でアクセスしてみると……

http://localhost:8080/py/http_
HTTP_ACCEPT_CHARSET: Shift_JIS,utf-8;q=0.7,*;q=0.7
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
HTTP_CONNECTION: keep-alive
HTTP_HOST: localhost:8080
HTTP_CACHE_CONTROL: max-age=0
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE: ja,en-us;q=0.7,en;q=0.3

……うまくいった。

2011年9月6日火曜日

Google App Engine はじめようかな? - Hello, World!

Hello, World! を実行してみる。

簡単なリクエスト ハンドラの作成

helloworld という名前のディレクトリを作成します。アプリケーションのすべてのファイルは、このディレクトリに配置します。

Hello, World! - Google App Engine - Google Code

どこにだろう?
とりあえずデスクトップに作ってみる。

helloworld ディレクトリで、helloworld.py という名前のファイルを作成し、次のようなコンテンツを入れます。

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'

Hello, World! - Google App Engine - Google Code

helloworld.py という名前で保存してみた。

設定ファイルの作成

App Engine アプリケーションには、app.yaml という名前の設定ファイルがあります。このファイルで最も重要なのは、どのハンドラ スクリプトをどの URL に対して使用するかが記述されていることです。

helloworld ディレクトリで、app.yaml という名前のファイルを作成し、次のようなコンテンツを入れます。

application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py

Hello, World! - Google App Engine - Google Code

app.yaml という名前で保存してみた。

アプリケーションのテスト

ハンドラ スクリプトと設定ファイルを使用して、各 URL にハンドラをマッピングすれば、アプリケーションは完成です。App Engine SDK に含まれる Web サーバーでこれをテストすることができます。

次のコマンドで helloworld ディレクトリまでのパスを指定し、Web サーバーを起動します。

google_appengine/dev_appserver.py helloworld/

Hello, World! - Google App Engine - Google Code

ここで helloworld フォルダを指定するのか……それなら C:\ に移動して……

Command Prompt
C:\helloworld>dir /b
app.yaml
helloworld.py

C:\helloworld>

…… PATH は通っているみたいだから……

Command Prompt
C:\helloworld>C:\helloworld>PATH
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Google\google_appengine\

C:\helloworld>dev_appserver.py .

……で、起動すると Warning とプロンプトが表示された。

Command Prompt
Warning: You are using a Python runtime (2.7) that is more recent than the produ
ction runtime environment (2.5). Your application may use features that are not
available in the production environment and may not work correctly when deployed
 to production.
INFO     2011-09-06 07:13:05,358 appengine_rpc.py:159] Server: appengine.google.
com
Allow dev_appserver to check for updates on startup? (Y/n):

Python が 2.5 じゃ無いから、実際の環境では使えない機能あって、正しく動作しないかもしれないということらしいけど、とりあえず [Enter] キー。

いろいろメッセージが表示されて、PIL モジュールが import できないとか出ているけど、ウェブサーバが起動できたようなので、

Command Prompt
 :
 :
 :
INFO     2011-09-06 07:48:14,937 dev_appserver_multiprocess.py:637] Running appl
ication helloworld on port 8080: http://localhost:8080

ウェブブラウザで http://localhost:8080/ にアクセスしてみると、 Hello, World と表示されたから、うまくいったみたい。

追加参照

app.yaml は、おもに URL に対するハンドラを記述するファイルなので細かい設定は下のページを参照

Google App Engine はじめようかな? - インストール

Google App Engine の 開発環境ページを見ると

Google App Engine 用の Python アプリケーションの開発とアップロードには、App Engine Python ソフトウェア開発キット(SDK)を使用します。

Python SDK には、App Engine 環境をシミュレートするための Web サーバー アプリケーションが用意されており、ローカルのデータストアや Google アカウントを利用できます。また App Engine API を使用することで、URL をフェッチしたり、メールをコンピュータから直接送信したりできます。Python SDK は、Python 2.5 がインストールされているすべてのコンピュータで動作します。Windows、Mac OS X、Linux 用に異なるバージョンが提供されています。

必要に応じて、Python の Web サイトから Python 2.5 をダウンロードしてインストールしてください。Mac OS X 10.5 Leopard には、Python 2.5 があらかじめインストールされています。

開発環境 - Google App Engine - Google Code

とのことなので、Python の Web サイトから Python 2.5 をダウンロードしようとしけれど Python 2.7 の .msi(Windows 用) ファイルしか置いていないようなので、だめもとで python-2.7.2.msi をダウンロードして……

…… Python のインストールはすんなりと完了。次は、Google App Engine SDK for Python(GoogleAppEngine-1.5.3.msi) をダウンロードして……

……インストールも完了。

[Run Launcher] とあるので、とりあえず起動してみると……

Warning: Prerequisites for App Engine development are missing!

A valid python binary must be available. In addition,
the App Engine SDK must be installed. Here are the current
values we found:

 python = None
 App Engine SDK root = C:\Program Files\Google\google_appengine

Please install the missing pieces and restart the launcher.
If these are installed but the Launcher failed to find them,
you can configure their location by editing Launcher preferences.

The Launcher preferences can be modified by selecting Edit > Preferences.

python が None だから path がわからなかったみたい。[Edit] > [Preferences] で設定を更新できるということらしい。

[OK] をクリックすると Warning 画面が閉じて [Google App Engine Launcher] が表示されたので [Edit] < [Preferences] で [Path Path:] に "C:\Python27\python.exe" を設定したら、一度閉じる。

もう一度 [Run Launcher] をクリックしてみたら Warning 画面が表示されないのでこれでいいみたい。

次は Hello, World!

Google App Engine はじめようかな?

ウェブアプリケーションが無料で作成できるということらしいので、有料のレンタルサーバ解約できるかな?と思って、はじめてみようと、とりあえず紹介のページをよんでみる。

Java と Python のどちらかを選べるみたいだけど、手軽さからするとスクリプト言語だし Python がよさそうかな?

全くしらない言語だから、まずは Python を覚えるところから。

ざっと「1. やる気を高めよう」~「8. エラーと例外」まで読んで、やる気が下がってきたからひとまず読書はここまでにして残りはあとで。

全く根拠はないけれど、なんとなく BASIC ににているかな?
なんだか懐かしい感じで親しみやすいきがする。

次は、Google App Engine の開発環境を導入してみてみる。