2011年11月12日土曜日

Setting up Google App Engine Environment (Go) for Ubuntu 11.10

Ubuntu 11.10でGoogle App Engine (Go)の環境をセットアップするのに手間取ったのでメモ。

Google App Engine SDKの取得

いまの最新版SDK1.6.0を落としてセットアップ。パスも適当に通す。

$ cd ~/lib
$ wget http://googleappengine.googlecode.com/files/go_appengine_sdk_linux_386-1.6.0.zip
$ unzip go_appengine_sdk_linux_386-1.6.0.zip
$ PATH=$PATH:~/lib/google_appengine

Python 2.5のセットアップ

Google App Engineの開発用ローカルサーバー(dev_appserver.py)を正常に動作させるにはまだPython 2.5が必要なため、インストールする。ただUbuntu 11.10はもうPython 2.5を切りすててしまっているため、外部のリポジトリから入手する必要がある。

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python2.5 python2.5-dev

PILのセットアップ

PILがインストールされていないとdev_appserver.pyの起動時に"Could not initialize images API; you are likely missing the Python "PIL" module."というエラーが出るため、PILもインストールする。

$ wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz 
$ tar xzf Imaging-1.1.7.tar.gz 
$ cd Imaging-1.1.7/
$ sudo python2.5 setup.py install

これであとは下のような感じでdev_appserver.pyを起動すればいける。

$ python2.5 ~/lib/google_appengine/dev_appserver.py server/ 

Python 2.7でやろうとすると

そもそもなんでこんなことを今さらやったかというと、Python 2.7でdev_appserver.pyを実行すると、ときたま落ちるから。試しにChannel APIを使おうとしたら↓のエラーで死ぬようになってしまったため、やはり正規のPython 2.5を入れる必要がでた、ということ。

INFO     2011-11-12 14:29:41,093 dev_appserver.py:2753] "POST /_ah/channel/connected/ HTTP/1.1" 404 -
----------------------------------------
Exception happened during processing of request from ('0.1.0.10', 80)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 311, in process_request
    self.shutdown_request(request)
  File "/usr/lib/python2.7/SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR)
AttributeError: 'ChannelPresenceConnection' object has no attribute 'shutdown'
----------------------------------------
ERROR    2011-11-12 14:29:41,128 dev_appserver_main.py:664] Error encountered:
Traceback (most recent call last):

  File "/home/masato/lib/google_appengine/google/appengine/tools/dev_appserver_main.py", line 657, in main
    http_server.serve_forever()

  File "/home/masato/lib/google_appengine/google/appengine/tools/dev_appserver.py", line 3527, in serve_forever
    self.handle_request()

  File "/home/masato/lib/google_appengine/google/appengine/tools/dev_appserver.py", line 3490, in handle_request
    self._handle_request_noblock()

  File "/usr/lib/python2.7/SocketServer.py", line 287, in _handle_request_noblock
    self.shutdown_request(request)

  File "/usr/lib/python2.7/SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR)

AttributeError: 'ChannelPresenceConnection' object has no attribute 'shutdown'

Now terminating.