web-dev-qa-db-ja.com

UbuntuでPythonのMod_WSGIを設定する方法

UbuntuボックスにMOD_WSGIをセットアップしようとしています。 http://ubuntuforums.org/showthread.php?t=833766 で見つけた次の手順を実行する必要があると言った手順を見つけました

  1. Sudo apt-get install libapache2-mod-wsgi
  2. Sudo a2enmod mod-wsgi
  3. Sudo /etc/init.d/Apache2 restart
  4. Sudo gedit/etc/Apache2/sites-available/defaultとディレクトリの更新
<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>
  1. Sudo /etc/init.d/Apache2 restart
  2. 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:~$ 
25
AutomatedTester

これはmod_wsgi apt-getパッケージの1年以上前の既知のバグであることを発見しました。詳細は http://www.mail-archive.com/[email protected]/msg1147225.html にあります。 apt-getパッケージにはw​​sgi.loadファイルがなかったため、上のリンクの手順を実行して作成する必要がありました。

助けてくれたみんなに感謝!

6
AutomatedTester

モジュールが実際に正しくロードされているかどうかを確認してください:

Apache2ctl -t -D DUMP_MODULES
5
rmyates

私が知る限り、あなたは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を再起動しますすべき動作します。

4
Dan Loewenherz

まず、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ディレクティブ。

2
Zayne S Halsall

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を使用してください。

1

pythonの構文を最初に確認できます。関数定義の後に実際に4つのスペースがあるかどうかを確認してください。pythonファイルを最初に実行して、ターミナル

$ python /var/www/py/wsgi_handler.wsgi

エラーが表示されない場合は、Webブラウザーを介して実行してください。

http:// localhost/wsgi /

ちなみに、あなたはあなたのApache設定/ virtualhostファイルの何かを見逃しているようです。これをタグの中に入れます

WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py

ちなみに、wsgiモジュールをインストールしてもaptは問題ありません。私は今それをテストし、私のWebブラウザでpythonスクリプトを正常に実行しました。

1
YeahBoi

これが適切かどうかはわかりませんが、実行後:

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
0
Nick Bolton