GAEの開発環境をRedhat系Linux(Scientific Linux)上に構築する

概要

ずっとやりたいやりたいと思っていたGAEを最近になってようやく始めた。
最初はWindows環境で開発していたのだが、いろいろとめんどくさかったので、Linux上に開発環境を作ることに。その際にハマったことなどを備忘記録としてエントリー。


環境

目指す開発環境

WindowsからsshでSL(Scientific Linux)に入ってムニャムニャと開発〜開発用サーバを動かして〜Windows上のブラウザで動作確認〜みたいな開発環境を作る。
仮想でも仮想じゃなくてもたぶん大丈夫な内容になっているかと。Windows上の仮想環境でのみ動作確認済み。

開発機のスペック
ディストリビューション Scientific Linux release 6.1 (Carbon)
カーネル 2.6.32-131.0.15.el6.x86_64
仮想化ソフトウェア Virtual Box

やったこと

  • google_appengine_1.5.4.zip の導入
  • Python 2.5.6インストール
  • 外部から開発用サーバにアクセスできるようにする設定

Google App Engine SDKを導入

~/build以下にダウンロードして解凍、コマンドを~/bin以下に登録する.

$ cd ~/build
$ wget http://googleappengine.googlecode.com/files/google_appengine_1.5.4.zip
$ unzip google_appengine/
$ ln -s ~/build/google_appengine/appcfg.py ~/bin/appcfg.py
$ ln -s ~/build/google_appengine/dev_appserver.py ~/bin/dev_appserver.py

Python2.5を使用するように指定しておく。(appcfg.py , dev_appserver.py共に)

#!/usr/bin/env python

から以下に変更。

#!/usr/bin/env python2.5

これでGAE SDKの導入終了。


Python 2.5.6導入

GAEでは、Python2.5をサポートしているので、現状で入っているPythonは2.6なので、共存する形でインストールすることに。

エラー: 'HTTPSHandler'ないよ〜

普通にインストールして、GAEの開発用サーバを起動させてみると以下のエラー。

$ python2.5 dev_appserver.py kshi-kshi.appspot.com/
Traceback (most recent call last):
  File "/home/kshi_kshi/bin/dev_appserver.py", line 77, in <module>
    run_file(__file__, globals())
  File "/home/kshi_kshi/bin/dev_appserver.py", line 73, in run_file
    execfile(script_path, globals_)
  File "/home/kshi_kshi/build/google_appengine/google/appengine/tools/dev_appserver_main.py", line 154, in <module>
    from google.appengine.tools import appcfg
  File "/home/kshi_kshi/build/google_appengine/google/appengine/tools/appcfg.py", line 68, in <module>
    from google.appengine.tools import appengine_rpc
  File "/home/kshi_kshi/build/google_appengine/google/appengine/tools/appengine_rpc.py", line 27, in <module>
    import fancy_urllib
  File "/home/kshi_kshi/build/google_appengine/lib/fancy_urllib/fancy_urllib/__init__.py", line 341, in <module>
    class FancyHTTPSHandler(urllib2.HTTPSHandler):
AttributeError: 'module' object has no attribute 'HTTPSHandler'

'HTTPSHandler'がないよ〜っていう感じのエラー。ググったところ以下のエントリー等がとても参考になった。
ありがとうございました。

ということなので、Python2.5をRebuildすることに。その前にSSL関連のパッケージで入っていなかったopenssl-develをいれる。

$ sudo yum -y install openssl-devel

でRebuildする。以下の内容のようにModules/Setup.distをconfigureする前に修正する。(以下引用)

1) 解凍した Python 2.5.5 のディレクトリ内 Modules/Setup.dist を編集して、コメントアウトされてる以下の行をいい感じにする。

こうなってるので、

#_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
#   -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#   -L$(SSL)/lib -lssl -lcrypto

こうする。

_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \
   -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
   -L$(SSL)/lib -lssl -lcrypto
http://d.hatena.ne.jp/ambasa/20110406/p1

でインストール後、開発用サーバを起動してみると。

エラー: _sqlite3 モジュールがないよ〜

まだ、正常に起動してくれない様子。以下エラー内容。

$ python2.5 dev_appserver.py kshi-kshi.appspot.com/
WARNING  2011-10-07 03:12:26,131 urlfetch_stub.py:108] No ssl package found. urlfetch will not be able to validate SSL certificates.
Traceback (most recent call last):
  File "/home/kshi_kshi/bin/dev_appserver.py", line 77, in <module>
    run_file(__file__, globals())
  File "/home/kshi_kshi/bin/dev_appserver.py", line 73, in run_file
    execfile(script_path, globals_)
  File "/home/kshi_kshi/build/google_appengine/google/appengine/tools/dev_appserver_main.py", line 156, in <module>
    from google.appengine.tools import dev_appserver
  File "/home/kshi_kshi/build/google_appengine/google/appengine/tools/dev_appserver.py", line 128, in <module>
    from google.appengine.datastore import datastore_sqlite_stub
  File "/home/kshi_kshi/build/google_appengine/google/appengine/datastore/datastore_sqlite_stub.py", line 59, in <module>
    import sqlite3
  File "/usr/local/lib/python2.5/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/usr/local/lib/python2.5/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ImportError: No module named _sqlite3

またググると、以下の素敵なエントリーと出会った。

どうやら、sqliteが入っている状態で、Pythonをビルドしないといけないらしいのだが、sqlite3は既に入っていたのだが、sqlite-develがなかったので、入れてみることに。

$ sudo yum -y install sqlite-devel

でさきほどと同様に、Module/Setup.dist に変更を加えて、Python2.5をRebuildする。
でもう一度開発用サーバを動かしてみる。

$ dev_appserver.py kshi-kshi.appspot.com/
WARNING  2011-10-07 03:38:22,588 urlfetch_stub.py:108] No ssl package found. urlfetch will not be able to validate SSL certificates.
INFO     2011-10-07 03:38:23,151 appengine_rpc.py:159] Server: appengine.google.com
Allow dev_appserver to check for updates on startup? (Y/n): Y

・・・(ログを上の分までしか取っていなかったので、以下は別日に起動させてみたログをつなげてみた。)・・・

INFO     2011-10-09 00:04:28,317 appcfg.py:463] Checking for updates to the SDK.
INFO     2011-10-09 00:04:33,884 appcfg.py:480] The SDK is up to date.
WARNING  2011-10-09 00:04:33,884 datastore_file_stub.py:512] Could not read datastore data from /tmp/dev_appserver.datastore
INFO     2011-10-09 00:04:33,906 rdbms_sqlite.py:58] Connecting to SQLite database '' with file '/tmp/dev_appserver.rdbms'
WARNING  2011-10-09 00:04:33,912 dev_appserver.py:4748] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging
INFO     2011-10-09 00:04:33,945 dev_appserver_multiprocess.py:637] Running application kshi-kshi on port 8080: http://localhost:8080

いろいろライブラリが入ってないとかで、警告は出ているが、

動いたーヽ(゚´Д`)ノ゚。 ヤッターン♪

今後気が向いたら足りないライブラリを入れることにして、Pythonの設定はこの辺にしておく。

外部から開発用サーバにアクセスできるようにする設定

VirtualBoxのポートフォワーディング設定

[VB マネージャー] -> [ネットワーク] -> [ポートフォワーディング]
以下のように、自己ホストに来た9000番ポートのアクセスを仮想サーバの9000番ポートに通すように設定.
ホストIPとゲストIPのセルは空白でOK.(GAE開発用のPortは9000番とした.)

ファイアウォールの設定

/etc/sysconfig/iptablesファイアウォール設定ファイル編集しを9000番ポートへの外部からのアクセス許可を与えておく.
設定は割愛。再起動して反映させる。

開発用サーバの起動時のオプションを用いる

以下のオプションを開発用サーバ起動時に加えれば、おk。

--port=9000
--address=0.0.0.0

$ dev_appserver.py --port=9000 --address=0.0.0.0 kshi-kshi.appspot.com/
...略...
INFO     2011-10-09 00:57:52,868 dev_appserver_multiprocess.py:637] Running application kshi-kshi on port 9000: http://0.0.0.0:9000

これで、外部から、http://"開発機のホスト:9000"にアクセスすることができる。これで終わり。

まとめ

やっぱり開発環境はLinuxがいいですよね〜。
ってことで、晴れてGAE開発者の仲間入りを果たすことができました。
しょうもないサービスを作って公開できたら、いいなと思います。ではでは。


結局、ここが最強のスタートガイド