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 件のコメント:

  1. 匿名13:49

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

    返信削除
  2. これ、という理由は思いつかないのですが…

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

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

    返信削除
  3. 匿名21:33

    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

    返信削除
  4. 匿名21:48

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

    返信削除
  5. 私の記事では、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())

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

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

    返信削除
  7. 匿名22:25

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

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

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

    返信削除
  9. 匿名10:06

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

    返信削除
  10. 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のログを見る事ができるんでしたっけ?)

    返信削除
  11. 匿名16:24

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

    返信削除