1

Python2.4.3を使用するCentOS5(Apache 2.2.3)サーバーにmod_python3.2.8をインストールして構成しました。Apacheによって正常にロードされます。

mpinfoテストページをアクティブにしましたが、機能します。そこで、次のコードを使用して単純な「HelloWorld」を作成しました。

from mod_python import apache

def handler(req):
    req.content_type = 'text/plain'
    req.write("Hello World!")
    req.flush()
    return apache.OK

テキストもソースもない空白のページを出力します。構文エラーを意識的に作成すると、たとえば、URLにエラー出力が表示されます(「def」の前にスペースを入れると)。

Mod_python error: "PythonHandler mod_python.cgihandler"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/cgihandler.py", line 96, in handler
    imp.load_module(module_name, fd, path, desc)

  File "/var/www/vhosts/localhost/httpdocs/mptest.py", line 3

    def handler(req):

    ^

SyntaxError: invalid syntax

さまざまなチュートリアル、FAQ、トラブルシューティングガイドを閲覧するのに約5時間費やしましたが、このexaktの問題の説明が見つかりません。

問題/原因は何だと思いますか?

編集:これがサイトのApache構成です...

<Directory />
    Options FollowSymLinks
    AllowOverride None

    AddHandler mod_python .py
    PythonHandler mptest
    PythonDebug On 
</Directory>

編集2:ああ、私が言及するのを忘れたもう1つのことは、mod_pythonを使用してApache拡張機能を作成するつもりだということです。アプリケーション自体はPHPで書かれていますが、サーバー上でセキュリティをtweeks作成する必要があります:)

4

3 に答える 3

2

使用しないでくださいmod_python

よくある間違いはmod_python「」と見なすことですmod_phpが、Pythonの場合はそうではありませんmod_pythonWebアプリケーションではなく、apache拡張機能の作成に適しています。

Python WebアプリケーションとWebサーバー(Apacheだけでなく)の間で使用する標準化されたプロトコルはWSGIです。これを使用すると、アプリケーションをwsgi準拠のWebサーバーに確実に公開できます(ほとんどすべての最新のWebサーバーはwsgi準拠です)

アパッチでは、mod_wsgi代わりに使用してください。

あなたの例は、wsgi標準とmod_wsgiApacheを使用して書き直されました。

mywebapp.py

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/plain')])
    return ['Hello World']

Apache構成:

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/mywebapp.py
<Directory /usr/local/www/wsgi-scripts>
  Order allow,deny
  Allow from all
</Directory>

に移動するhttp://localhost/myappと、スクリプトが実行されます。さらに、このルート(つまりhttp://localhost/myapp/stuff/here)の下でのアクセスはすべて、このスクリプトによって処理されます。

Webフレームワークを選択することをお勧めします。CherryPyパイロンDjango。彼らは物事をさらに簡単にします。

見るのに良いウェブサイトはwsgi.orgです

于 2009-10-02T10:18:17.000 に答える
1

元々の問題は、リクエストを処理するためにmod_python.cgihandlerが呼び出されていることです。これは、PythonスクリプトファイルがCGIスクリプトとして解釈されていることを意味します。したがって、何も返されないのも不思議ではありません。

mod_python.cgihandlerを有効にしているApache構成で定義が競合している可能性があります。

于 2009-10-02T23:08:41.717 に答える
0

私は明確にするために完全に新しい答えを作ります...

代わりにmod_wsgiをインストールすることにしました。設定しました。テストファイルに移動すると、ページのソースが表示されます。私はまだ問題を見つけることに時間を費やしていないので、問題を解決するか、もっと助けが必要だと判断したときにあなたに連絡します:)

ありがとうございました :)

于 2009-10-02T11:35:19.550 に答える