ずっとやりたいやりたいと思っていた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 |
~/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では、Python2.5をサポートしているので、現状で入っているPythonは2.6なので、共存する形でインストールすることに。
普通にインストールして、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 -lcryptohttp://d.hatena.ne.jp/ambasa/20110406/p1
まだ、正常に起動してくれない様子。以下エラー内容。
$ 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の設定はこの辺にしておく。
[VB マネージャー] -> [ネットワーク] -> [ポートフォワーディング]
以下のように、自己ホストに来た9000番ポートのアクセスを仮想サーバの9000番ポートに通すように設定.
ホストIPとゲストIPのセルは空白でOK.(GAE開発用のPortは9000番とした.)
/etc/sysconfig/iptables のファイアウォール設定ファイル編集しを9000番ポートへの外部からのアクセス許可を与えておく.
設定は割愛。再起動して反映させる。
--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開発者の仲間入りを果たすことができました。
しょうもないサービスを作って公開できたら、いいなと思います。ではでは。