2

mod-python を apache2 で動作させようとしていますが、成功していません。mod-python を動作させるためのいくつかのチュートリアルに従いましたが、何が間違っているのかわかりません。

http://site.example.com/cgi-bin/test.pyにアクセスすると、実際に 404 ページが表示されます! (一方、ファイルが実際に存在しない場合は 403 禁止されます)

これが私のセットアップです:

/etc/apache2/sites-enabled/ には、各ドメインにちなんで名付けられた構成ファイルがあります。site.example.com ファイルで、これをユーザー ディレクティブ セクションに追加しました。

# Begin user directives <--
<Directory /home/default/site.example.com/user/htdocs/cgi-bin/>
     Options Indexes FollowSymLinks MultiViews
     AllowOverride AuthConfig
     Order allow,deny
     allow from all
     AddHandler mod_python .py
     PythonHandler mod_python.publisher
     PythonDebug On
</Directory>
# --> End user directives

次の行を含む完全なファイルはこちらです。

test.pyの内容を追加するための編集:

#!/usr/bin/python  
print "Content-type: text/html"  
print  
print 'hello world'  
#print 1/0

上記のように、404 /python/test.py was not found on this server.

しかし、最後の行のコメントを外すと、次のようになります。

Mod_python error: "PythonHandler mod_python.publisher"

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/publisher.py", line 98, in handler
    path=[path])

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 457, in import_module
    module = imp.load_module(mname, f, p, d)

  File "/home/default/site.example.co.uk/user/htdocs/python/test.py", line 5, in ?
    print 1/0

ZeroDivisionError: integer division or modulo by zero

このトレースバックは正しく見えますか? ちなみに、cgitb を有効にしても効果はありません。

これを診断するために追加できる他の情報はありますか?

4

3 に答える 3

2

私の知る限り、Publisherハンドラーは、応答を返すために要求オブジェクトとメソッドを取り込む必要があります。

私のスクリプトには、次のようなものがあります。

#!/usr/bin/python  
def run(req):
  return 'Hello world!'

次に、http://.../python/test.py/runにアクセスします

この場合、reqはパブリッシャーハンドラーによって渡されるリクエストオブジェクトです。

また、まだ持っていない場合は__init__.py、test.pyと同じディレクトリにファイルを置く必要があります。

また、パブリッシャーを使用すると、応答がキャッシュされることがあることに気付きました。すでに修正したのと同じエラーがブラウザに返されます。したがって、すでに修正したと思われるエラーが表示された場合は、apacheを再起動することをお勧めします。

于 2009-04-02T16:33:46.000 に答える
2

まず、このcgi-binディレクトリは CGI スクリプト用であるため、使用しないことをお勧めします。mod_python で読み込まれる Python ファイルは CGI スクリプトではありません。(理論的には、ディレクトリから Python ファイルをロードできるはずですがcgi-bin、Python ファイルに独自のディレクトリを指定すると、デバッグが容易になります。)

さて、あなたのドキュメントルートは です/home/default/site.example.com/user/htdocsので、そのサブディレクトリを作成することをお勧めします.たとえば/home/default/site.example.com/user/htdocs/python、Pythonファイルをテスト用に配置します. Aliasこのディレクトリには、またはディレクティブを作成しないでくださいScriptAlias(既にドキュメント ルートの下にあるため)。ただし、仮想ホスト ファイルに次のようなものを配置する必要があります。

<Directory /home/default/site.example.com/user/htdocs/python/>
     Order allow,deny
     Allow from all
     AddHandler mod_python .py
     PythonHandler mod_python.publisher
     PythonDebug On
</Directory>

ファイルtest.pyをそのディレクトリに移動し、 に移動してみてください。ファイル内の関数http://site.example.com/python/test.pyの結果が表示されるはずです。indextest.py

于 2009-04-01T15:37:02.437 に答える
2

目的の出力を得るには、python ファイルは次のようになります。

def index():
  return "hello world"

" http://somesite.com/path/test.py " はデフォルトで "index" 関数を開きます。

" http://somesite.com/path/test.py/run " は代わりに関数 "run" を開きます。

より手の込んだものにすることもできますが、上記は基本的な mod_python ページを提供します。

于 2009-04-20T22:34:02.210 に答える