google-code-prettify

2006-11-10

さくらインターネットでweb.py

さくらインターネットのレンタルサーバーでweb.pyを使えるように設定した。

  1. web.pyのホームページのGET IT: web.pyの所からweb.pyをダウンロード。

  2. web.pyを$HOME/lib/python/の下に置いておく。

  3. flupをダウンロード。

  4. $ python setup.py install --home=${HOME} --forceで、flupをインストール。flupが無いとCGIが動作しないので注意。

  5. .htaccessに、AddHandler cgi-script .pyを書いておく(これはいらないかも)。

  6. 以下のファイルを$HOME/www/a.pyとして作成しておく。パーミッションは755で。

    #!/usr/bin/env python

    import sys

    sys.path.append('/home/ユーザー名/lib/python')

    import web

    urls = (
    '/', 'view'
    )

    class view:
    def GET(self):
    print "\r\n"
    print "Hello, world!"
    web.internalerror = web.debugerror



    if __name__ == '__main__':
    web.run(urls, web.reloader)

  7. webブラウザで、http://サーバーのアドレス/a.py/にアクセス。最後の/を忘れずに。

  8. Hello, Worldと表示されればOK。

参考にしたサイト:
「さくらのレンタルサーバ」で Python 外部モジュールを使う

11 件のコメント:

kenj さんのコメント...

さくらインターネットのレンタルサーバに書いたステップ通りやって見ましたが、うまく行きません。ずっと「500Internal Server Error」 ほかに考えられる原因はなにかありませんか?助けてください! 

sakurai さんのコメント...

これ、という理由は思いつかないのですが…

とりあえず、apache経由でなく、直接web.pyをHTTPサーバーとして動作させてみてはいかがでしょうか。

sshでloginして、
$ python a.py
とすると、ポート8080でweb.pyが動作します。
ブラウザで、
http://サーバーのアドレス:8080/
にアクセスして、Hello worldと表示されればOKです。

kenj さんのコメント...

http://サーバーのアドレス:8080/にアクセスと以下のエラーが表示された

Traceback (most recent call last):
File "/home/ユーザー名/lib/python/web/webapi.py", line 303, in wsgifunc
result = func()
File "/home/ユーザー名/lib/python/web/request.py", line 125, in <lambda>
func = lambda: handle(inp, fvars)
File "/home/ユーザー名/lib/python/web/request.py", line 47, in handle
cls = mod[cls]
TypeError: unsubscriptable object

kenj さんのコメント...

すみません、web.pyだけlib/pythonにコピーしたら、Hello worldが表示されました、web.pyパッケージのインストールはだめか。。。

sakurai さんのコメント...

私の記事では、web.py 0.1を使っていました。
web.py 0.2だと、確かにエラーになりますね。

web.py 0.2の場合、以下のようにすると動作すると思います。

#!/usr/bin/env python

import sys

sys.path.append('/home/パス/python')

import web

urls = (
'/(.*)', 'hello'
)

class hello:
def GET(self, name):
i = web.input(times=1)
if not name: name = 'world'
for c in xrange(int(i.times)): print 'Hello,', name+'!'

if __name__ == "__main__": web.run(urls, globals())

sakurai さんのコメント...

web.pyというファイル一つだけなのは、0.1系です。
0.2以降は、複数ファイルに分割されています。

kenjさんが最初にお使いだったのは0.2で、後のは0.1系です。

kenj さんのコメント...

sakuraiさんが書いた通りweb.py 0.2にも正しく表示されました、ありがとうございます。
しかし、http://サーバーのアドレス/a.py/にアクセスして、相変わらず「500Internal Server Error」
.htaccessファイルはAddHandler cgi-script .pyだけでよろしいでしょうか

sakurai さんのコメント...

実行のパーミッションの設定は行われているでしょうか。
もし行われていない場合は、
$ chmod a+x a.py
のようにしてみてください。

これで動作しない場合は…
ちょっと思いあたる点がありません。

kenj さんのコメント...

実行パーミッションの設定は問題ないです。

sakurai さんのコメント...

flupがうまく動作していないのかもしれませんね。

私が使っているのは、以下の組み合わせです。
flup-r2030
web.py 0.138

ディレクトリ構造は、
/home/username/lib/python/web.py
/home/username/lib/python/flup/

a.pyでのsys.path.appendは、
/home/username/lib/python
です。

あと手としては、apacheのログを見るとかでしょうか。
(さくらインターネットって、apacheのログを見る事ができるんでしたっけ?)

kenj さんのコメント...

sakuraiさんの指摘通りでした、flupの問題でした、flup-0.5からflup-r2030に変更した所正しく表示されました。
親切に教えてくれて本当にありがとうございます。