4

私は Apache と mod_wsgi を使用して Python で webapp2 を実行しようとしています。これまでのところ、私は惨めに失敗しました。:-(

https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingwebappの次の例を使用しました。

import webapp2

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, webapp World!')

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

このファイルを として保存しc:wamp\www\Python\hello.py、参照すると、次のようlocalhost/Python/hello.pyになります。

Not Found
The requested URL /python/hello.py was not found on this server.

ただし、Apache 内の Python の mod_wsgi は正常に動作しているようです。次のコード

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello from Python!'

    response_headers = [('Content-type', 'text/plain'), 
        ('Content-Length', str(len(output)))]

    start_response(status, response_headers)
    return [output]

にありますc:\wamp\www\Python\test.py。にアクセスするlocalhost/Python/test.pyと、ブラウザはHello from Python!期待どおりに表示されます。

これまでのところ、def (="application") のデフォルト名を「something_else」に変更する方法を見つけただけです。

WSGICallableObject something_else

.htaccess

しかし、どうすればApacheに変数appを呼び出し可能なオブジェクトとして受け入れさせることができますか? (これまでのところ、私は主に Web 以外のプログラミングに Python を使用してきたので、これがばかげた質問でないことを願っています。)

どんな助けでも大歓迎です。

アップデート:

Graham は、私が Apache 構成ファイルで使用している mod_wsgi 構成と、それを追加する場所について尋ねました。追加した

LoadModule wsgi_module modules/mod_wsgi.so

<Directory "c:/wamp/www/python">
Options +ExecCGI
AddHandler wsgi-script .py
Order allow,deny
Allow from all
</Directory>

httpd.confすべての「LoadModule」行の最後で右に。

構成に関する追加情報: mod_wsgi-win32-ap22py27-3.3.so を使用しています。(もちろん、名前を に変更してmod_wsgi.soに配置しましたc:\wamp\bin\apache\apache2.2.22\modules。) 私の Python コマンド ラインは、バージョンについて次のように述べていますPython 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32。私が使用しているワンプ サーバーは 32 ビットです。私のオペレーティング システムは Windows 7 Ultimate 64bit SP1 です。

これが診断に役立つことを願っています...

4

5 に答える 5

7

http://code.google.com/p/modwsgi/wiki/InstallationOnWindowsから mod_wsgi をインストールし、httpd.conf を適切に構成します。

すでに次の 2 行を追加していると思います。

LoadModule wsgi_module modules/mod_wsgi.so
WSGICallableObject app

http://pypi.python.org/pypi/setuptoolsから py-setuptools をインストールしてから、Python のモジュールをインストールします。

easy_install WebOb
easy_install Paste
easy_install webapp2

仮想ホストの作成

<VirtualHost *>
  ServerAdmin admin@mydomain.com
  DocumentRoot "/vhost/domains/mydomain/htdocs"
  ServerName a.mydomain.net
  WSGIScriptAlias / "/vhost/domains/mydomain/wsgi/main.py"
  Alias /static/ "/vhost/domains/mydomain/htdocs/static/"
</VirtualHost>

ファイル: main.py

import webapp2

class Hello(webapp2.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
    self.response.out.write('hello world!')

application = webapp2.WSGIApplication([
    ('/', Hello)
], debug=True)
于 2012-10-24T10:55:05.447 に答える
0

とった!この線

app = webapp2.WSGIApplication([('/', MainPage)], debug=True)

する必要があります:

app = webapp2.WSGIApplication([('/Python/hello.py', MainPage)], debug=True)

そして、すべてが機能します!ああ!

辛抱強く私を正しい方向に押してくれたGrahamに感謝します。WSGICallableObjectが「app」に設定されるとすぐに、問題は確かにwebapp2の範囲内にありました。

webapp2で同様のルーティングの問題に悩まされている人のために、http://webapp-improved.appspot.com/guide/routing.htmlをチェックしてください。「単純なルート」の最初の例では、webapp.WSGIApplication数分以内に通話を書き直しました。

アップデート

残念ながら、上記の解決策は信頼できないようです。今日、webapp2から正しい応答が返されることもあれば、webapp2から404が返されることもあります。

昨日から1行のコードを変更せずに。

どのような条件で404または正しい応答が得られるかを再現できません。私は今のところこれをあきらめています。Pythonはとてもクールな言語だと思うので、これは悲しいことです。

@グラハム:繰り返しになりますが、ご協力いただきありがとうございます。

于 2012-07-18T11:41:41.537 に答える
0

試したことはありませんか:

 WSGICallableObject app

コードを次のように変更することもできます。

application = webapp2.WSGIApplication([('/', MainPage)], debug=True)

mod_wsgi に別の名前を探すように指示する必要がなくなります。

于 2012-07-13T14:11:14.893 に答える
0

私はまだ試していませんが、別の Python モジュール (runme.py など) を次のコードで作成しましたか?

def main():
  run_wsgi_app(yourmodule.app)
if __name__ == '__main__':
  main()

(注: https://developers.google.com/appengine/docs/python/python27/migrate27#wsgiから取得しました

于 2012-07-13T16:06:23.817 に答える