UbuntuボックスにMOD_WSGIをセットアップしようとしています。 http://ubuntuforums.org/showthread.php?t=833766 で見つけた次の手順を実行する必要があると言った手順を見つけました
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews ExecCGI AddHandler cgi-script .cgi AddHandler wsgi-script .wsgi AllowOverride None Order allow,deny allow from all </Directory>
Test.wsgiを作成して
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
ステップ2は、apt-getがmod-wsgiを見つけたとしてもそれを見つけられないと言っているため失敗します。手順を続けると、pythonアプリはブラウザでプレーンテキストとして表示されるだけです。
私が間違ったことは何ですか?
編集:質問の結果
automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-======================================-======================================-============================================================================================
ii libapache2-mod-wsgi 2.5-1 Python WSGI adapter module for Apache
automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi
Package: libapache2-mod-wsgi
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 376
Maintainer: Ubuntu MOTU Developers <[email protected]>
Architecture: i386
Source: mod-wsgi
Version: 2.5-1
Depends: Apache2, Apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7)
Suggests: Apache2-mpm-worker | Apache2-mpm-event
Conffiles:
/etc/Apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6
/etc/Apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c
Description: Python WSGI adapter module for Apache
The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server
Gateway Interface, a standard interface between web server software and
web applications written in Python) compliant interface for hosting Python
based web applications within Apache. The adapter provides significantly
better performance than using existing WSGI adapters for mod_python or CGI.
Original-Maintainer: Debian Python Modules Team <[email protected]>
Homepage: http://www.modwsgi.org/
automatedtester@ubuntu:~$ Sudo a2enmod libapache2-mod-wsgi
ERROR: Module libapache2-mod-wsgi does not exist!
automatedtester@ubuntu:~$ Sudo a2enmod mod-wsgi
ERROR: Module mod-wsgi does not exist!
RMYateの追加編集
automatedtester@ubuntu:~$ Apache2ctl -t -D DUMP_MODULES
Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_worker_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_Host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgid_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
python_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK
automatedtester@ubuntu:~$
これはmod_wsgi apt-getパッケージの1年以上前の既知のバグであることを発見しました。詳細は http://www.mail-archive.com/[email protected]/msg1147225.html にあります。 apt-getパッケージにはwsgi.loadファイルがなかったため、上のリンクの手順を実行して作成する必要がありました。
助けてくれたみんなに感謝!
モジュールが実際に正しくロードされているかどうかを確認してください:
Apache2ctl -t -D DUMP_MODULES
私が知る限り、あなたはmod_wsgiモジュールをhttpd.conf
にロードしていません。
まず、Apacheのmods-enabled
ディレクトリにwsgiファイルを追加してみます。
Sudo ln -s /etc/Apache2/mods-available/wsgi.load /etc/Apache2/mods-enabled
Sudo ln -s /etc/Apache2/mods-available/wsgi.conf /etc/Apache2/mods-enabled
次に、Apacheを再起動しますすべき動作します。
まず、WSGIモジュールが実際にインストールされていることを確認します。
dpkg -l libapache2-mod-wsgi
これにより、名前、バージョンなどを含む出力が表示されます。名前の左側にある文字を探します。これは、パッケージの現在のステータスを示します。手動で確認するには、/ etc/Apache2/mods-available /を確認します。両方のwsgi.confが表示されます。 およびwsgi.load。これらが存在する場合、対応するシンボリックリンクが/ etc/Apache2/mods-enabled /にあるはずです。
notを設定する必要がある場合は、まず修正することから始めてください。Apacheがインタープリターを見つけられない場合、pythonコードを解釈できません。また、test.pyスクリプトは、設定したAddHandlerディレクティブを指定すると機能しません-このディレクティブは、特定の拡張子のファイルを関連するハンドラーに渡すようApacheに指示します。スクリプトを作成するtest.wsgiまたは変更AddHandlerディレクティブ。
LoadModule行を追加して、実際にmod_wsgiをロードしましたか?実際のエラーメッセージとは何ですか?見る:
http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide
低レベルの命令用。バイナリパッケージを使用しているので、コンパイルをスキップできますが、それでもmod_wsgiをロードする必要があります。これをどこでどのように行うかは、Linuxディストリビューションによってある程度決定されます。そのガイドに基づいて、あなたは実行することを意図されています:
Sudo a2enmod mod-wsgi
Sudo /etc/init.d/Apache2 restart
実際にそれをしましたか?
編集
あなたの質問をもう一度読んでそれは明白です。拡張子が.wsgiのファイルはmod_wsgiによって処理されるとのことですが、ファイルに.py拡張子を付けました。代わりに.wsgiを使用してください。
pythonの構文を最初に確認できます。関数定義の後に実際に4つのスペースがあるかどうかを確認してください。pythonファイルを最初に実行して、ターミナル
$ python /var/www/py/wsgi_handler.wsgi
エラーが表示されない場合は、Webブラウザーを介して実行してください。
ちなみに、あなたはあなたのApache設定/ virtualhostファイルの何かを見逃しているようです。これをタグの中に入れます
WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py
ちなみに、wsgiモジュールをインストールしてもaptは問題ありません。私は今それをテストし、私のWebブラウザでpythonスクリプトを正常に実行しました。
これが適切かどうかはわかりませんが、実行後:
apt-get install libapache2-mod-wsgi
...次のファイルは存在しましたnotが存在しました:
/etc/Apache2/mods-available/wsgi.conf
/etc/Apache2/mods-available/wsgi.load
再インストールしても、不足しているファイルは置き換えられなかったようです。おかしい!しかし、purge
はトリックを実行するように見えました:
apt-get install libapache2-mod-wsgi
apt-get purge libapache2-mod-wsgi
apt-get install libapache2-mod-wsgi
# ls /etc/Apache2/mods-available/ | grep wsgi
wsgi.conf
wsgi.load