Apache + mod_rewrite環境で、web.redirectメソッドを使うと、スクリプト名を含んだURLになってしまって困っていました。
たとえば、
http://example.com/blog/search
から、blogのルートディレクトリにリダイレクトさせようと、web.redict(’/')を実行すると、
http://example.com/blog/
になって欲しいのに、
http://example.com/blog/code.py/
になってしまうのです。スクリプト名を見せたくないからmod_rewriteを使っているのに、これでは意味がありません。
例によって、ググってやっと見つけたヒントがこちら。
web.redirect - web.py | Google Groups
Apacheの環境変数に、REAL_SCRIPT_NAMEを設定すればよいようです。ただ、”/path/to/site”に何を入れれば良いのか分からなかったので、さらにGoogle Groups内で検索。
Calling web.redirect(’/'), the url goes to …:8001 - web.py | Google Groups
こちらのスレッドに従って、REAL_SCRIPT_NAMEに空白を設定してみます。
import os os.environ['REAL_SCRIPT_NAME'] = ''
すると、
http://example.com/blog/search
からのリダイレクトが、
http://example.com/
に変わりました。確かに、URLにスクリプト名は出なくなりました。ただ、リダイレクトして欲しいのは、blogディレクトリなので、少し修正。
import os os.environ['REAL_SCRIPT_NAME'] = '/blog'
これで、望み通りの動作になりました。web.py | Google Groupsに感謝です。
Cocoaアプリの制作が一段落付いたので、前々から懸案事項だったWebフレームワーク探しを開始。フレームワークの導入で、ホームページ管理の手間を少しでも減らしたいところです。
選ぶに当たってのポイントは、さくらインターネットのCGI環境で実用的な速度で動くことが、まず第一。あとは、なるべく軽量でシンプルなものならなお良い。
今検討しているのが、web.py。Pythonで書かれたフレームワークです。本当は、Rubyで書かれたRamazeにしたかったけど、CGIでうまく動かない&情報が少ないため断念。
Pythonは、以前『みんなのPython』を読んだときに試して、あまり積極的に使いたいとは思ってませんでした。ただ、年末に『Pythonチュートリアル』を借りて読んでみたら、前ほど拒絶反応がでなかったので方針変更。慣れなんでしょうか?
とりあえず、CGIでの動作確認、テンプレートの使用、MySQLからのデータ読み出しまでは試してみた。スッキリしているのは、好印象。エラーメッセージが、なんだか読みづらい気もするけど、やはり、慣れか?
いろいろハマったうちの一つが、これ。’/www/.python-eggs’に書き込めないとかいうエラー。MySQL for Pythonを使おうとすると、引っかかるみたい。web.pyのHTTPサーバーで動かしていたときは出なかったんで、困った。
ググってみたところ、Apacheの設定にSetEnvで’.python-eggs’を追加すれば良いらしいけど、さくらではその設定は許可されていない。
改めてGoogle.comで調べなおしたら、英語の掲示板で答えを発見。
import os os.environ['PYTHON_EGG_CACHE'] = '/home/username/.python-eggs'
Pythonスクリプト側で環境変数を設定してあげれば良かったんですね。また一つ、勉強になりました。
Recent Comments