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インストール
- 外部から開発用サーバにアクセスできるようにする設定
- VirtualBox ポートフォワーディング設定
- ファイアウォールの設定
- 開発用サーバの起動時のオプションを用いる
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'がないよ〜っていう感じのエラー。ググったところ以下のエントリー等がとても参考になった。
ありがとうございました。
- CentOS 5.5 に Google App Engine インストールするのにはまって大変でした
- Compiling Python 2.5 with SSL support
- 「Google App EngineでHello World!! + ローカルLinux環境」をやっていて出たエラーの Q & A
ということなので、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 -lcryptohttp://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開発者の仲間入りを果たすことができました。
しょうもないサービスを作って公開できたら、いいなと思います。ではでは。