Iは、Python/2.7.3セットアップのApache/2.2.22(Debianの)のmod_wsgi/3.3に抱き合わせていmod_wsgiはどのようにアプリケーションを認識して実行していますか?
私はWSGIScriptAlias実行取得する管理者が、唯一のトップレベルのモジュールコードではなく、その中に画定されapplication
。 apacheのエラーログに表示されるブラウザを使用してURLを要求すると
#!/usr/bin/python
import sys
print >> sys.stderr, "I'm wsgi_test"
def application(environ, start_response):
print >> sys.stderr, 'in application'
status = '200 OK'
output = 'hello World'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
wsgi_test.py
スクリプトが実行されます( "私はwsgi_testよ":
Apacheの設定:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIScriptAlias /testurl /home/django/test/test/wsgi_test.py
<Directory /home/django/test/test>
<Files wsgi_test.py>
Order deny,allow
Allow from all
</Files>
</Directory>
がwsgi_test.py )。ただし、ページは提供されず(500内部サーバーエラー)、追加のエラーログエントリがありますスクリプトヘッダーの早すぎる終了:wsgi_test.py。第二の試験として
は、私は正しく 'Hello Worldの' を提供、簡単なスクリプトを、使用:wsgi_test2.py:
#!/usr/bin/python
import sys
print 'Content-type: text/plain\n\n'
print 'Hello World'
私の質問: はどのようmod_wsgiのは知っているし、実行しません応用?
上記のテストから、私はwsgi_test.py
が直ちに実行されると結論づけます。実行可能なコードはなく、定義はapplication
なので、スクリプトは何も出力しないので、サーバはHTMLヘッダーの欠落について苦情を言います。 application
を実行するようにシステムに指示するにはどうすればよいですか?
ありがとうございました!これは本当に嫌な落とし穴です。特に、デフォルトのdjango wsgiファイルは 'wsgi.py'という名前になっています(私はテストを始めていました)。 'project.wsgi'などの方がよいでしょうか? –
mod_wsgiのドキュメントでは、通常、これ以外の理由で、常に「.wsgi」拡張子を推奨しています。 Djangoは '' .wsgi''ファイルを生成し、 '' wsgi.py''をインポートするべきだと提案されましたが、提案は無視されました。結局のところ、この欠陥はApacheの設定でデフォルトを追加するためのLinuxディストリビューションにあります。これは '' cgi-bin''ディレクトリだけでなく全てのディレクトリに対して '' .py''をCGIに強制します。しかし、この問題は誰にも影響しません。それで、デフォルトのApache設定で何かコメントを外して有効にしてもよろしいですか? –
ウェブホスティングサービス上にあらかじめ設定されたApacheで問題が発生しました。私はデフォルト設定を変更しませんでした。しかし、それはウェブホスティング業者がそうしたことかもしれません。 –